Как сформировать список повторяющихся предметов с разной частотой? - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу сгенерировать список строк, показанных ниже:

['EEG', 'EEG', 'EEG', 'EMG', 'EMG', 'EOG']

но, например, с 32 пунктами «ЭЭГ» и 2 «ЭМГ» и одним «ЭОГ». Как я мог сделать это в одной строке?

Я прочитал пост StackOverflow и знаю, что один повторяющийся элемент может быть сгенерирован с помощью кода ниже:

['EEG']*32

или

['EEG' for _ in range(32)]

Но мне нужен полный список всех предметов с разными частотами. Мне нужен плоский список различных элементов, а не вложенный список списков.

Ответы [ 5 ]

2 голосов
/ 29 апреля 2019

Вы можете повторить элемент списка, используя оператор умножения, а затем просто сложить списки вместе

answer = ['EEG']*32 + ['EMG']*2 + ['EOG']  
# ['EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EMG', 'EMG', 'EOG']
1 голос
/ 29 апреля 2019

Вы можете использовать метод collections.Counter.elements:

from collections import Counter
list(Counter(EEG=32, EMG=2, EOG=1).elements())

Возвращает:

['EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EEG', 'EMG', 'EMG', 'EOG']
1 голос
/ 29 апреля 2019

Используйте оператор умножения, затем конкатенируйте, например, так:

['EEG']*32 + ['EMG']*2 + ['EOG']
0 голосов
/ 30 апреля 2019

Вы можете использовать оператор умножения, а затем объединить каждый список следующим образом:

list = ['EEG'] * 32 + ['EMG'] * 2 + ['EOG']

Или вы также можете импортировать Counter из коллекций, как сказал другой пользователь, например:

from collections import Counter
list(Counter(EEG=32, EMG=2, EOG=1).elements())

Оба из них приведут к списку, содержащему 32 'ЭЭГ', 2 'ЭМГ' и 1 'ЭОГ'

0 голосов
/ 29 апреля 2019

динамический способ сделать это будет:

config = [{"str":"EEG","freq":32},{"str":"EMG","freq":2},{"str":"EOG","freq":1}]
[item for sublist in ([[x["str"]]*x["freq"] for x in config]) for item in sublist]

, чтобы разобрать это:

config - это массив объектов, где str key - строка, а freq key - это количество раз, которое вы хотите повторить

([[x["str"]]*x["freq"] for x in config]) возвращает массив массивов повторяющихся строк

внешняя часть сглаживает этот сложный массив в простой список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...