我有以下元组列表:
indices = [(1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
我正在运行以下命令并获得:
indices2 = []
for j in range(len(indices)):
indices2.append(indices[j] * len(indices[j]))
indices2
给出:
[(1,), (2,), (3,), (1, 2, 1, 2), (1, 3, 1, 3), (2, 3, 2, 3), (1, 2, 3, 1, 2, 3, 1, 2, 3)]
但是,我想获得:
[(1,), (2,), (3,), (1, 2), (1, 2), (1, 3), (1, 3), (2, 3), (2, 3), (1, 2, 3), (1, 2, 3),
(1, 2, 3)]
我哪里做错了?
最佳答案
您可以先创建一个嵌套列表的列表,然后在 for 循环之后将其展平:
import itertools
indices = [(1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
indices2 = []
for j in range(len(indices)):
indices2.append([indices[j]]*len(indices[j]))
chain = itertools.chain(*indices2)
indices2 = list(chain)
print indices2
[indices[j]]*len(indices[j])
创建列表,每个列表具有 len(indices[j])
数量的 indices[j ]
元组。然后使用 itertools.chain
将生成的嵌套列表 indices2
展平为单个非嵌套列表。
另一种方法是嵌套的 for
循环:
indices2 = []
for j in range(len(indices)):
for jln in range(len(indices[j])):
indices2.append(indices[j])
这里的循环简单地附加元组 len(indices[j])
时间。
第一个可能更 pythonic,看起来更好,第二个更简单。如果问题需要性能升级,第一个也可能有更多的开销,应该对此进行验证。
关于python - 根据列表中每个元组的长度克隆列表中的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46373200/