对于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代码。
发布于 2016-12-13 16:54:53
您可以这样使用列表理解:
[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]发布于 2016-12-13 16:51:59
一个简单的清单理解是可行的:
>>> 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]发布于 2016-12-13 16:51:20
c=[]
for item, count in zip(a,b):
c.extend([item]*count)
print(c)应该这么做。一次将一个元素添加到列表中,然后在结束时立即打印所有元素。[item]*count是item的count-element list([]),extend将提供的列表的内容添加到调用extend的列表中。
https://stackoverflow.com/questions/41126389
复制相似问题