我正在通过CodeAcademy工作,我有一个问题,那里没有答案。分配是获取列表列表并列出其所有元素的单个列表。下面的代码是我的答案。但我不明白为什么“item”被视为该代码列表中的元素,而(请参阅下面的评论)...
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)
...下面代码中的“item”被视为整个列表而不是列表中的元素。下面的代码给出了输出:
[[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会以不同的方式解释这些差异。
答案 0 :(得分:8)
列表中的+=
就地添加运算符与在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]]
答案 1 :(得分:2)
def join_lists(*args):
from itertools import chain
return list(chain.from_iterable(args))