【发布时间】:2010-10-13 15:44:36
【问题描述】:
我有这个列表理解:
[[x,x] for x in range(3)]
这导致了这个列表:
[[0, 0], [1, 1], [2, 2]]
但我想要的是这个列表:
[0, 0, 1, 1, 2, 2]
生成此列表的最简单方法是什么?
【问题讨论】:
我有这个列表理解:
[[x,x] for x in range(3)]
这导致了这个列表:
[[0, 0], [1, 1], [2, 2]]
但我想要的是这个列表:
[0, 0, 1, 1, 2, 2]
生成此列表的最简单方法是什么?
【问题讨论】:
[y for x in range(3) for y in [x, x]]
【讨论】:
[x]*2 而不是[x,x]。
>>> [i for i in range(3) for _ in range(2)]
[0, 0, 1, 1, 2, 2]
【讨论】:
一个通用的解决方案;
m = 3 #the list of integers
n = 2 # of repetitions
[x for x in range(m) for y in range(n)]
【讨论】:
>>> [int(x/2) for x in range(6)]
[0, 0, 1, 1, 2, 2]
【讨论】:
x // 2 一起使用会比int(x / 2) 更好?在 Python 2.7 中,timeit 显示 // 的速度比 Python 3.1 快两倍多一点,对于大范围,几乎是三倍。
我的解决方案:
def explode_list(p,n):
arr=[]
track=0
if n==0:
return arr
while track<len(p):
m=1
while m<=n:
arr.append(p[track])
m=m+1
track=track+1
return arr
【讨论】:
你可能会侥幸逃脱:
[floor(x/2) for x in range(6)]
编辑1
[int(x/2) for x in range(6)]
同样是更便携的解决方案。尽管其他提供的答案似乎更好。
【讨论】:
math.floor() 返回一个float,所以这不太一样。
[x/2 for x in range(6)]
更新:
[x//2 for x in range(6)] #ok now ?
【讨论】: