这两种代码有什么区别?

2024-10-04 09:32:23 发布

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

我最近开始用python2.7编写代码。我是分子生物学家。 我正在写一个脚本,包括创建如下列表:

mylist = [[0, 4, 6, 1], 102]

这些列表通过向mylist[0]添加一个项并向mylist[1]求和值来递增。你知道吗

为此,我使用以下代码:

def addres(oldpep, res):
    return [oldpep[0] + res[0], oldpep[1] + res[1]]

效果很好。由于mylist[0]可能会变得有点长,而且我有数百万个这样的列表需要处理,因此我认为使用append或extend可能会使我的代码更快,所以我尝试:

def addres(pep, res):
    pep[0].extend(res[0])
    pep[1] += res[1]
    return pep

在我看来也应该是一样的结果。当我在任意列表上尝试时,它确实会给出相同的结果。但是当我把它输入数百万个列表时,它给出了一个完全不同的结果。所以。。。这两者有什么区别?脚本的其余部分完全相同。 谢谢您! 罗伯托


Tags: 代码脚本列表returndefrespep效果
2条回答

区别在于addres的第二个版本修改了作为pep传入的列表,其中第一个版本返回一个新的列表。你知道吗

>>> mylist = [[0, 4, 6, 1], 102]
>>> list2 = [[3, 1, 2], 205]
>>> addres(mylist, list2)
[[0, 4, 6, 1, 3, 1, 2], 307]
>>> mylist
[[0, 4, 6, 1, 3, 1, 2], 307]

如果您不需要修改原始列表,我认为您不会得到比您编写的第一个更快的addres的Python实现。不过,您可能能够处理修改,或者提出一种稍微不同的方法来加快代码的速度,如果这是您面临的问题的话。你知道吗

列表是python中通过引用传递的对象。你知道吗

a=列表()

这并不意味着a是列表,而是a指向刚刚创建的列表。你知道吗

在第一个示例中,您正在使用list元素并创建一个新的list,这是另一个对象,而在第二个示例中,您正在修改list内容本身。你知道吗

相关问题 更多 >