假设我有一个给定的对象(一个字符串"a",一个数字 - 让我们说0,或者一个列表['x','y']
)
我想创建包含此对象的许多副本的列表,但不使用for循环:
L = ["a", "a", ... , "a", "a"]
要么
L = [0, 0, ... , 0, 0]
要么
L = [['x','y'],['x','y'], ... ,['x','y'],['x','y']]
我对第三种情况特别感兴趣.谢谢!
Lup*_*uch 41
您可以使用*
运营商:
L = ["a"] * 10
L = [0] * 10
L = [["x", "y"]] * 10
Run Code Online (Sandbox Code Playgroud)
小心这创建相同项目的 N个副本,这意味着在第三种情况下,您创建一个包含N个列表引用的["x", "y"]
列表; L[0][0]
例如,更改将修改所有其他副本:
>>> L = [["x", "y"]] * 3
>>> L
[['x', 'y'], ['x', 'y'], ['x', 'y']]
>>> L[0][0] = "z"
[['z', 'y'], ['z', 'y'], ['z', 'y']]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可能希望使用列表推导:
L = [["x", "y"] for i in range(10)]
Run Code Online (Sandbox Code Playgroud)
Amb*_*ber 30
itertools.repeat()
是你的朋友.
L = list(itertools.repeat("a", 20)) # 20 copies of "a"
L = list(itertools.repeat(10, 20)) # 20 copies of 10
L = list(itertools.repeat(['x','y'], 20)) # 20 copies of ['x','y']
Run Code Online (Sandbox Code Playgroud)
请注意,在第三种情况下,由于列表是通过引用引用的,因此更改列表中的['x','y']的一个实例将更改所有这些实例,因为它们都引用相同的列表.
为避免引用相同的项,您可以使用理解来为每个列表元素创建新对象:
L = [['x','y'] for i in range(20)]
Run Code Online (Sandbox Code Playgroud)
(对于Python 2.x,请使用xrange()
而不是range()
性能.)
归档时间: |
|
查看次数: |
29120 次 |
最近记录: |