0

我正在通过 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 会以不同的方式解释这些。

4

2 回答 2

8

列表上的+=就地添加运算符与调用list.extend()on执行相同的操作new_list.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]]
于 2013-06-21T16:36:44.570 回答
2

Martijn(一如既往)很好地解释了这一点。但是,(仅供参考)Pythonic 方法是:

def join_lists(*args):
    from itertools import chain
    return list(chain.from_iterable(args))
于 2013-06-21T16:48:25.047 回答