我要生成如下所示的字符串列表:
['EEG', 'EEG', 'EEG', 'EMG', 'EMG', 'EOG']
,但是,例如,有32个“ EEG”项目和2个“ EMG”和一个“ EOG”。 我怎么能在一排中做到这一点?
我已经阅读了StackOverflow帖子,并且我知道可以使用以下代码生成单个重复元素:
['EEG']*32
或
['EEG' for _ in range(32)]
但是我想要一个具有不同频率的所有项目的完整列表。 我想要一个不同项目的简单列表,而不是列表的嵌套列表。
答案 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”的列表