组合列表中的元素:似乎python以两种不同的方式处理同一个项目,我不知道为啥[重复]
Posted
技术标签:
【中文标题】组合列表中的元素:似乎python以两种不同的方式处理同一个项目,我不知道为啥[重复]【英文标题】:Combining elements in list: seems like python treats the same item in two different ways and I don't know why [duplicate]组合列表中的元素:似乎python以两种不同的方式处理同一个项目,我不知道为什么[重复] 【发布时间】:2013-06-18 21:00:34 【问题描述】:我正在通过 CodeAcademy 工作,但我有一个问题在那里没有得到解答。任务是获取一个列表列表并制作一个包含所有元素的列表。下面的代码是我的有效答案。但我不明白为什么“项目”被视为该代码列表中的元素,而(见下文继续评论)......
m = [1, 2, 3]
n = [4, 5, 6]
o = [7, 8, 9]
def join_lists(*args):
new_list = []
for item in args:
new_list += item
return new_list
print join_lists(m, n, o)
...下面代码中的“项目”被视为整个列表,而不是列表中的元素。下面的代码给出了输出:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
我也尝试使用: new_list.append(item[0:][0:]) 认为它会遍历索引和子索引,但它给出了相同的结果。我只是不明白这是如何解释的。
m = [1, 2, 3]
n = [4, 5, 6]
o = [7, 8, 9]
def join_lists(*args):
new_list = []
for item in args:
new_list.append(item)
return new_list
print join_lists(m, n, o)
另外,我知道我可以在上面的代码中添加另一个 for 循环,并且我明白为什么会这样,但我仍然不明白为什么 Python 会以不同的方式解释这些代码。
【问题讨论】:
+=
的行为类似于 list.extend
对于列表:When is “i += x” different from “i = i + x” in Python?
@tdelaney 哎呀!写错了,只想写list.extend
。
@Ashwini Chaudhary - 我认为这是一个错字
【参考方案1】:
Martijn(一如既往)很好地解释了这一点。但是,(仅供参考)Pythonic 方法是:
def join_lists(*args):
from itertools import chain
return list(chain.from_iterable(args))
【讨论】:
+1 或者,sum(args, [])
怎么样?【参考方案2】:
列表中的+=
就地添加运算符与在new_list
上调用list.extend()
的作用相同。 .extend()
接受一个可迭代对象并将每个元素添加到列表中。
list.append()
将单个 项添加到列表中。
>>> lst = []
>>> lst.extend([1, 2, 3])
>>> lst
[1, 2, 3]
>>> lst.append([1, 2, 3])
>>> lst
[1, 2, 3, [1, 2, 3]]
【讨论】:
谢谢,我想我明白了。我认为它是在“for item in args”中定义的。但是该命令决定了如何处理该项目。非常感谢! @user1252778:您的args
是列表列表;其中的每个元素本身就是一个列表(取自传递给函数的m
、n
和o
)。以上是关于组合列表中的元素:似乎python以两种不同的方式处理同一个项目,我不知道为啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章