如何给每个列表元素添加后缀?

3 投票
2 回答
11194 浏览
提问于 2025-04-18 18:53

我有两个长度不一样的列表。第一个列表里是一些变量的名字,这些变量是用来做长期研究的;第二个列表里是这些变量的后缀。用户会提供一个CSV文件,从中读取变量名,然后系统会提示用户输入这些变量的迭代次数(n),以及n个后缀的名字。

下面是一个简单的例子:

迭代次数:2

后缀1:pre

后缀2:6month

列表1: ['mood1', 'mood2', 'mood3', 'dep1', 'dep2', 'dep3']

列表2: ['pre', '6month']

想要得到的结果是:

['mood1_pre', 'mood2_pre', 'mood3_pre', 'dep1_pre', 'dep2_pre', 'dep3_pre', 'mood1_6month', ..., 'dep3_6month']

我已经把程序写好了,除了输出的结果把每个字母都分开成了单独的元素,比如:

How many iterations of the variables do you need?: 3
Variable Suffix 1: pre
Variable Suffix 2: 6m
Variable Suffix 3: 12m
['B', 'o', 'b', '_', 'p', 'r', 'e', 'J', 'o', 'e', '_', 'p', 'r', 'e', 'J', 'i',
 'm', '_', 'p', 'r', 'e', 'A', '_', 'p', 'r', 'e', 'B', '_', 'p', 'r', 'e', 'C',
 '_', 'p', 'r', 'e', '1', '_', 'p', 'r', 'e', '2', '_', 'p', 'r', 'e', '3', '_',
 'p', 'r', 'e', '1', '4', '_', 'p', 'r', 'e', 'B', 'o', 'b', '_', '6', 'm', 'J',
 'o', 'e', '_', '6', 'm', 'J', 'i', 'm', '_', '6', 'm', 'A', '_', '6', 'm', 'B',
 '_', '6', 'm', 'C', '_', '6', 'm', '1', '_', '6', 'm', '2', '_', '6', 'm', '3',
 '_', '6', 'm', '1', '4', '_', '6', 'm', 'B', 'o', 'b', '_', '1', '2', 'm', 'J',
 'o', 'e', '_', '1', '2', 'm', 'J', 'i', 'm', '_', '1', '2', 'm', 'A', '_', '1',
 '2', 'm', 'B', '_', '1', '2', 'm', 'C', '_', '1', '2', 'm', '1', '_', '1', '2',
 'm', '2', '_', '1', '2', 'm', '3', '_', '1', '2', 'm', '1', '4', '_', '1', '2',
 'm']

我用这个来生成新列表:

newvarlist.extend((varlist[vars] + '_' + varsuffix[j]))

2 个回答

1

如果你对最终列表的顺序没有特别要求:

from itertools import product, imap
l1 = ['mood1', 'mood2', 'mood3', 'dep1', 'dep2', 'dep3']
l2 = ['pre', '6month']
x = list(imap('_'.join, product(l1, l2)))

这样做会生成 ['mood1_pre', 'mood1_6month', ...] 这样的结果,而不是 ['mood1_pre', 'mood2_pre', ...] 这种结果。

15

这里有一种方法可以使用 列表推导式 来实现:

['{}_{}'.format(a, b) for b in b_list for a in a_list]

示例:

>>> a_list = ['mood1', 'mood2', 'mood3', 'dep1', 'dep2', 'dep3']
>>> b_list = ['pre', '6month']
>>> result = ['{}_{}'.format(a, b) for b in b_list for a in a_list]
>>> result
['mood1_pre', 'mood2_pre', 'mood3_pre', 'dep1_pre', 'dep2_pre', 'dep3_pre', 'mood1_6month', 'mood2_6month', 'mood3_6month', 'dep1_6month', 'dep2_6month', 'dep3_6month']

撰写回答