Получить такое количество элементов в процентах от списка

Я хотел бы извлечь процент элементов из списка, удалить их и добавить в новый список.

Пример :

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]

Примечание: порядок не имеет значения, предметы можно брать случайным образом

Итак, допустим, в списке 12 элементов, а процент равен 0,5, нам просто нужно вернуть 1-е 6 элементов как один список, а 2-е 6 как второй список?

Anshumaan Mishra 04.04.2022 15:06

Обратите внимание, что list — это имя скорее импортного класса вплоть до того момента, когда вы сбросите его, чтобы он стал конкретным экземпляром этого класса.

JonSG 04.04.2022 15:13

Просто любопытно: это связано с вашим аналогичным предыдущим вопрос? (Если да, то как?)

Kelly Bundy 04.04.2022 15:16

Что, если процент не является целым числом, например, если вы хотите 30% списка с 7 элементами (то есть вам нужно 2,1 элемента)?

Kelly Bundy 04.04.2022 15:18

Если вам интересно, я написал функцию, которая позволяет мне разделить набор данных на N клиентов (несбалансированное распределение), каждый клиент имеет большинство определенных классов и небольшую часть других классов, как в следующем примере: client_1 имеет [90% всех данных класса 0, 90% класса 1, 90% класса 2, 5% класса 3, ...].

ProgrX 04.04.2022 15:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
5
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это:

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 :-)

Kelly Bundy 04.04.2022 15:39

Другие вопросы по теме