如何将整数列表中的文本列表相乘并得到一个长文本列表?

时间:2017-03-03 18:26:51

标签: python list python-3.x

这适用于Python 3.我有两个列表:

lista = ['foo', 'bar']
listb = [2, 3]

我想要:

newlist = ['foo', 'foo', 'bar', 'bar', 'bar']
但是我被卡住了。如果我尝试:

new_list = []
for i in zip(lista, listb):
    new_list.append([i[0]] * i[1])

我明白了:

[['foo', 'foo'], ['bar', 'bar', 'bar']]

我知道这有效,但我不会总是知道每个列表的内容。

new_list = ['foo'] * 2 + ['bar'] * 3

提前致谢!

3 个答案:

答案 0 :(得分:3)

您可以使用以下一行 列表理解

new_list = [x for n,x in zip(listb,lista) for _ in range(n)]

代码的工作原理如下:首先我们生成zip(listb,lista),生成(2,'foo'), (3,'bar'), ...元组现在,对于每个元组,我们都有第二个for循环,它迭代n时间(for _ in range(n)),因此我们多次将x添加到列表中。

_是一个变量,通常用于表示_携带的值并不重要:它仅被使用,因为我们需要for循环中的变量来强制迭代。

答案 1 :(得分:1)

你自己很亲密!您需要做的只是使用list.extend而不是list.append

new_list = []
for i in zip(lista, listb):
    new_list.extend([i[0]] * i[1])

这会将列表new_list扩展为您提供的元素(附加每个元素),而不是附加完整列表。

如果您需要获得幻想,可以始终使用itertools中的函数来达到同样的效果:

from itertools import chain, repeat

new_list = list(chain(*map(repeat, lista, listb)))
循环中的

.extend虽然速度较慢,但​​在可读性方面优于前一个。

答案 2 :(得分:1)

使用.extend()而不是.append()