成为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代码。
答案 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]*count
是count
的{{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)]