0

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

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

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

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

['EEG']*32

或者

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

但我想要一份包含不同频率的所有项目的完整列表。我想要一个不同项目的平面列表,而不是列表的嵌套列表。

4

5 回答 5

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']
于 2019-04-29T20:47:57.417 回答
1

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

['EEG']*32 + ['EMG']*2 + ['EOG']
于 2019-04-29T20:47:43.457 回答
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']
于 2019-04-29T20:50:27.120 回答
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是一个对象数组,其中strkey 是字符串,freqkey 是您想要重复的次数

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

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

于 2019-04-29T20:55:41.543 回答
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”的列表

于 2019-04-30T11:35:21.477 回答