所以我有一个列表[a,b,c]
,我希望获得[a,b,c,a,b,c,...a,b,c]
。
我当然可以用两个嵌套循环来做这个,但必须有更好的方法吗?如果我可以提供一个计数,那么itertools.cycle()
就会成为解决方案。
两个限制因素:
答案 0 :(得分:1)
对于不可变类型,可以在列表中使用乘法运算符:
>>> [1,2,3]*5
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
对于可变类型,您需要在插入之前执行元素的副本。
我会链接列表项目的重复副本。
import copy,itertools
a=[12]
b=[13]
c=[14]
l = [a,b,c]
new_l = list(itertools.chain.from_iterable(map(copy.copy,l) for _ in range(5)))
在new_l
中,所有列表都是独立的(引用不是彼此的副本)。在某些情况下,您可能需要copy.deepcopy
。
答案 1 :(得分:1)
最终我提出了:
[copy.copy(e) for _ in range(N) for e in sourceList]
答案 2 :(得分:0)
你可以使用列表乘法作为复杂性,它非常快:
s = ['a', 'b', 'c'] * i
然后你可以按索引修改元素,你认为还不是吗?
答案 3 :(得分:0)
首先,如果有一个list = [a, b, c]
,如果打印它,就会得到以下错误
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-17-eb02c90df247> in <module>
----> 1 list = [a, b, c]
2 list
NameError: name 'c' is not defined
list
应定义如下
>>> list = ['a', 'b', 'c']
>>> print(list)
['a', 'b', 'c']
对于您的情况,只需将列表乘以 N 即可。对于示例,让我们考虑 N=3
>>> n = 3
>>> list = list*n
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
现在,如果需要扩展列表(例如,考虑 N=3),根据可能出现的需要,给出一个替代答案
['a' 'a' 'a' 'b' 'b' 'b' 'c' 'c' 'c']
可以使用 np.repeat
做到这一点
>>> n = 3
>>> list= np.repeat(list, n)
array(['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], dtype='<U1')
这检索了一个数组。如果这不符合自己的需要并且想要一个列表(使用 np.ndarray.tolist
),如下
>>> list = list.tolist()
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c']