将iterable的所有元素添加到列表中

Bar*_*ski 26 python tuples list

是否有更简洁的方式来做以下事情?

t = (1,2,3)
t2 = (4,5)

l.addAll(t)
l.addAll(t2)
print l # [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试的:我宁愿避免在参数列表中传递.

def t_add(t,stuff):
    for x in t:
        stuff.append(x)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 51

使用list.extend(),而不是list.append()将迭代中的所有项添加到列表中:

l.extend(t)
l.extend(t2)
Run Code Online (Sandbox Code Playgroud)

要么

l.extend(t + t2)
Run Code Online (Sandbox Code Playgroud)

甚至:

l += t + t2
Run Code Online (Sandbox Code Playgroud)

其中list.__iadd__(就地添加)list.extend()在引擎盖下实现.

演示:

>>> l = []
>>> t = (1,2,3)
>>> t2 = (4,5)
>>> l += t + t2
>>> l
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

但是,如果您只是想创建一个列表t + t2,那么list(t + t2)这将是到达那里的最短路径.

  • 我是Python的新手,所以这可能是一个天真的问题,但你怎么知道这适用于任意迭代,而不仅仅是列表?[文档](https://docs.python.org/3/tutorial/datastructures.html)说(强调添加)"*list.extend(L)通过附加**给定列表中的所有项目来扩展列表**.相当于`a [len(a):] = L`.*"这可能有记录,但我不知道在哪里......我看到[视图和迭代器而不是列表](https:// docs.python.org/3/whatsnew/3.0.html#views-and-iterators-instead-of-lists),但这更像是"改变了什么?" 条目. (2认同)

the*_*eye 5

stuff.extend 是你想要的.

t = [1,2,3]
t2 = [4,5]
t.extend(t2)
# [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

或者你可以做到

t += t2
Run Code Online (Sandbox Code Playgroud)