Python2.7追加到列表中

2024-04-27 00:02:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着使用一个列表列表,并希望获取列表列表中的一个元素,使用它,然后将其附加到另一个列表中。你知道吗

我发现.append()有我意想不到的行为:

def li_of_li_test (li):
    l = li[0]
    l.append(0)
    return li

函数应该只返回li,但是。。。你知道吗

print li_of_li_test ([[1,2,3],[4,5]])

退货:

[[1, 2, 3, 0], [4, 5]]

我该怎么做才能让它回来

[[1,2,3],[4,5]]

Tags: of函数test元素列表returndefli
3条回答

我在实数代码中假设:

def li_of_li_test (li):
    l = li[0]
    l.append(0)
    return li

将试图保持li参数不变,但将li中的第一个子list放在其他list中。您认为l = li[0]会创建子list的一个新副本来使用,但它不是这样做的;它只是使l成为另一个对li[0]中存储的相同list的引用。如果要复制list,可以通过以下方法实现简单的浅层复制:

l = li[0][:]  # [:] is a complete slice of the sublist, a shallow copy

或者,您可以使用更深入的工作来复制list结构的组件,而不仅仅是list结构:

import copy

l = copy.deepcopy(li[0])

不管怎样,简单的append和类似的l都不会再影响li。你知道吗

如果您需要对不同的子列表进行许多突变,deepcopyli作为一个整体可能是有意义的;您可以在前面做一次,并且不需要担心在那之后li的破坏性突变。你知道吗

在python中,值是通过引用传递的。列表是一个可变结构。你知道吗

from copy import deepcopy

def li_of_li_test (li):
    l = deepcopy(li[0])
    l.append(0)
    return li

print li_of_li_test ([[1,2,3],[4,5]])

[[1, 2, 3], [4, 5]]

以下方法可以解决您的问题:

def li_of_li_test (li):
    l = li[:]
    l = list(li[0])
    l.append(0)
    return li

相关问题 更多 >