组合列表中的元素:似乎python以两种不同的方式处理相同的项目,我不知道为什么

Combining elements in list: seems like python treats the same item in two different ways and I don't know why

本问题已经有最佳答案,请猛点这里访问。

我正努力通过法典学院,我有一个问题在那里没有答案。任务是获取一个列表,并列出所有元素的单个列表。下面的代码就是我的答案。但我不明白的是,为什么"item"在该代码的列表中被视为元素,而(请参见下面的注释)。

1
2
3
4
5
6
7
8
9
10
11
12
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
 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

我还尝试使用:new_list.append(item[0:][0:]),以为它将遍历索引和子索引,但得到了相同的结果。我只是不明白这是怎么解释的。

1
2
3
4
5
6
7
8
9
10
11
12
13
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会对这些进行不同的解释。


列表中的+=就地添加运算符与在new_list上调用list.extend()的操作相同。.extend()接受一个iterable并将每个元素添加到列表中。

另一方面,list.append()向列表中添加了一个项目。

1
2
3
4
5
6
7
>>> lst = []
>>> lst.extend([1, 2, 3])
>>> lst
[1, 2, 3]
>>> lst.append([1, 2, 3])
>>> lst
[1, 2, 3, [1, 2, 3]]


马蒂金(一如既往)解释得很好。然而,(仅供参考)Python疗法将是:

1
2
3
def join_lists(*args):
    from itertools import chain
    return list(chain.from_iterable(args))