如何生成不同频率的重复项列表?

时间:2019-04-29 20:45:58

标签: python string list non-repetitive

我要生成如下所示的字符串列表:

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

,但是,例如,有32个“ EEG”项目和2个“ EMG”和一个“ EOG”。 我怎么能在一排中做到这一点?

我已经阅读了StackOverflow帖子,并且我知道可以使用以下代码生成单个重复元素:

['EEG']*32

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

但是我想要一个具有不同频率的所有项目的完整列表。 我想要一个不同项目的简单列表,而不是列表的嵌套列表。

5 个答案:

答案 0 :(得分:2)

您可以使用乘法运算符重复列表元素,然后将列表加在一起

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 :(得分:1)

使用乘法运算符然后进行连接,如下所示:

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

答案 2 :(得分:1)

您可以使用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']

答案 3 :(得分:0)

做到这一点的动态方法是:

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键是字符串,freq键是您想要重复的次数

([[x["str"]]*x["freq"] for x in config])返回包含重复字符串的数组

外部将这个复杂的数组展平为一个简单列表

答案 4 :(得分:0)

您可以使用乘法运算符,然后像这样串联每个列表:

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

或者您也可以从集合中导入Counter,就像另一个用户所说的那样:

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

这两个参数都将产生一个包含32个“ EEG”,2个“ EMG”和1个“ EOG”的列表