组合列表中的元素:似乎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 是列表列表;其中的每个元素本身就是一个列表(取自传递给函数的mno)。

以上是关于组合列表中的元素:似乎python以两种不同的方式处理同一个项目,我不知道为啥[重复]的主要内容,如果未能解决你的问题,请参考以下文章

以两种不同的方式排序。但得到错误的输出

为啥以两种不同方式应用随机森林分类器的特征选择结果不同

按同一列分组,但以两种不同的方式聚合

为啥我不能在angularjs中以两种方式绑定指令组件具有相同的名称?

如何在EF Core中以两种方式制作唯一键?

多对多字段django以两种方式添加关系