Нарисуйте равное количество элементов списка из списка python - PullRequest
0 голосов
/ 06 апреля 2020

Я собрал данные, хранящиеся в списках 1000 python. Данные являются числами с плавающей точкой. Списки имеют разную длину. Самый маленький список - 23 точки данных, самый большой - 173.

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

Поэтому из наименьшего списка это будет каждый элемент.

Из списка с 46 элементами это будет каждый 2-й элемент и так далее по мере его увеличения.

Проблема здесь, очевидно, состоит в том, что это 40 элементов или 91 элемент, которые на самом деле не делятся поровну, и случайное распределение не даст мне равное распределение по индексу.

Попробовал itertools.islice с start, stop и шаг, но на самом деле не могу понять, как размер шага должен меняться, и я заканчиваю случаями, когда я на самом деле тяну 22 или 24 et c.

Ценю вашу помощь E

1 Ответ

1 голос
/ 06 апреля 2020

Это однострочная функция, которая возвращает список из n элементов из списка a_list, как можно более равномерно. Возможно, вы захотите добавить обработку ошибок, например, если n

def select_n(a_list, n):
    return [a_list[len(a_list) * k // n] for k in range(n)]

print(select_n(list(range(150)), 23))
print(select_n(list(range(23)), 23))
print(select_n(list(range(45)), 23))

Вывод:

[0, 6, 13, 19, 26, 32, 39, 45, 52, 58, 65, 71, 78, 84, 91, 97, 104, 110, 117, 123, 130, 136, 143]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
[0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...