我想在一个循环周期中使用重复值进行列表理解,如下所示:
s=[]
for i in range(5):
s+=[i,i]
但这不起作用。
[i, i for i in range(5)]
答案 0 :(得分:1)
你可以这样做:
[i for i in range(5) for j in range(2)]
输出结果为:
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
i
循环提供值,j
循环用于重复这些值。
答案 1 :(得分:0)
以下是zip
的一种方式:
[i for p in zip(range(5), range(5)) for i in p]
答案 2 :(得分:0)
没有直接的方法可以使用单级列表推导来完成与显式循环完全相同的操作。这是因为理解中循环的每次迭代必须至多产生一个值(如果你有if
子句,它可以产生零。)
但是,对于这种特定情况,您可以使用除法在迭代较大的range
时生成所需的重复值序列:
s = [i//2 for i in range(10)]
答案 3 :(得分:0)
我认为这样做会有所帮助。
[ i/2 for i in range(10)]
列表理解将包含与理解中的迭代器一样多的元素。在这种情况下,迭代器是range(10)
因为,你需要10个元素。您将需要超过10并且应用一些计算(在这种情况下为i/2
)以获得所需的元素。
答案 4 :(得分:0)
你可以试试这个:
s = [[i, i] for i in range(5)]
。
如果你希望它被展平,你可以尝试这种嵌套列表理解。
s = [x for y in [[i, i] for i in range(5)] for x in y]