繁体   English   中英

这两个代码有什么区别?

[英]What's the difference between these two codes?

我最近开始使用Python 2.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

在我看来应该给出相同的结果。 当我在任意列表上尝试它时,它确实给出了相同的结果。 但是当我将它提供给数百万个列表时,它给了我一个非常不同的结果。 那么......两者之间有什么区别? 脚本的其余部分完全相同。 谢谢! 罗伯托

不同之处在于, 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]

如果您需要在不改变原来的名单,我不认为你会真的要获得更快的Python实现的addres比你写的第一个。 但是,您可能能够处理修改,或者提出一种稍微不同的方法来加速代码,如果这是您面临的问题。

List是python中的对象,通过引用传递。

α=清单()

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

在第一个示例中,您使用列表元素并创建新列表,另一个对象,而在第二个示例中,您正在修改列表内容本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM