在python中创建2个列表中重复元素的列表

时间:2016-12-13 16:49:13

标签: python

成为python的新手,这是我的问题。给出两个列表:

a = [3, 4] 
b = [5, 2]

我想创建一个新列表,其中包含重复n次的第一个列表项,其中n是第二个列表中的对应元素。所以我希望输出如下:

c = [3,3,3,3,3,4,4]

其中3次重复5次,4次重复2次,依此类推。 我目前的代码看起来像这样

for item,no in zip(a,b):
    print(str(item)*no)

让我:

33333
44

我试图弄清楚如何从我当前的阶段到我想要的输出。任何帮助,将不胜感激。

我也在想,也许这可以通过列表理解完成,但我无法想出它的python代码。

7 个答案:

答案 0 :(得分:2)

简单的列表理解可行:

>>> a = [3, 4]
>>> b = [5, 2]
>>> [c for n, m in zip(a, b) for c in [n]*m]
[3, 3, 3, 3, 3, 4, 4]

如果您担心内存效率(例如对于大型m),那么您可以使用itertools.repeat()来避免中间列表:

>>> import itertools as it
>>> [c for n, m in zip(a, b) for c in it.repeat(n, m)]
[3, 3, 3, 3, 3, 4, 4]

答案 1 :(得分:0)

c=[]
for item, count in zip(a,b):
    c.extend([item]*count)
print(c)

应该这样做。一次添加一个元素列表,然后在结尾处一次打印所有元素。 [item]*countcount的{​​{1}} - 元素列表([]),extend添加了您提供的列表的内容在您打开item的列表中。

答案 2 :(得分:0)

您只需要使用extend

c = []
for item, no in zip(a, b):
    c.extend([item] * no)

答案 3 :(得分:0)

您可以像这样使用list comprehension

[i for i,j in zip(a, b) for k in range(j)]

以上行等同于以下嵌套for循环:

c = []
for i,j in zip(a, b):
    for k in range(j):
        c.append(i)

<强>输出:

>>> a = [3, 4]
>>> b = [5, 2]
>>> c = [i for i,j in zip(a, b) for k in range(j)]
>>> c
[3, 3, 3, 3, 3, 4, 4]

答案 4 :(得分:0)

你说你是Python的新手,所以这是一个简单的方法,只需使用基本循环:

a = [3 , 4]
b = [5 , 2]
c = []
index = 0
for i in a:
     for i in range(0 , b[index]):
         c.append(i)
     index += 1

答案 5 :(得分:0)

c = []
for i in range(len(b)):
    for j in range(b[i]):
        c.append(a[i])
print c

答案 6 :(得分:0)

有点不同

c = [a[b.index(j)] for i,j in enumerate(b) for i in range(j)]