Я хотел бы извлечь процент элементов из списка, удалить их и добавить в новый список.
Пример :
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_list = get_purcentage(list, purcentage = 0.3)
# list should now be :
# list = [1, 2, 3, 4, 5, 6, 7]
# new_list should now be :
# new_list = [8, 9, 10]
Примечание: порядок не имеет значения, предметы можно брать случайным образом
Обратите внимание, что list — это имя скорее импортного класса вплоть до того момента, когда вы сбросите его, чтобы он стал конкретным экземпляром этого класса.
Просто любопытно: это связано с вашим аналогичным предыдущим вопрос? (Если да, то как?)
Что, если процент не является целым числом, например, если вы хотите 30% списка с 7 элементами (то есть вам нужно 2,1 элемента)?
Если вам интересно, я написал функцию, которая позволяет мне разделить набор данных на N клиентов (несбалансированное распределение), каждый клиент имеет большинство определенных классов и небольшую часть других классов, как в следующем примере: client_1 имеет [90% всех данных класса 0, 90% класса 1, 90% класса 2, 5% класса 3, ...].






Попробуй это:
from random import shuffle
def get_percentage(lst, percentage):
shuffle(lst)
result = []
for _ in range(int(len(lst) * percentage)):
result.append(lst.pop())
return result
Теперь вы можете использовать новую функцию следующим образом:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
new_lst = get_percentage(lst, percentage=0.3)
Важный:
Функция get_percentage изменяет входной список lst!! Преимущество в том, что он не создает новый список с нуля.
РЕДАКТИРОВАТЬ Если вас не волнует случайность, все еще проще:
def get_percentage(lst, percentage):
result = []
for _ in range(int(len(lst) * percentage)):
result.append(lst.pop())
return result
Если можно создавать новые списки и использовать функцию по-другому:
def get_percentage(lst, percentage):
n = int(len(lst) * percentage)
return lst[n:], lst[:n]
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
lst, new_lst = get_percentage(lst, percentage=0.3)
Теперь я просто с нетерпением жду их следующего вопроса о том, почему 70% списка с 90 элементами дают им только 62 элемента вместо 63 :-)
Итак, допустим, в списке 12 элементов, а процент равен 0,5, нам просто нужно вернуть 1-е 6 элементов как один список, а 2-е 6 как второй список?