在Python if语句中使用列表和元组

时间:2012-09-13 15:12:33

标签: python list if-statement tuples

我想知道在python if语句中是否有任何理由更喜欢列表而不是元组,反之亦然。因此,以下功能相同,但在性能和编码风格方面优于另一个,还是无关紧要?

if x in (1,2,3):
    foo()

if x in [1,2,3]:
    foo()

我似乎已经养成了使用元组的习惯,如果有2或3个值和列表的任何更长的时间,我认为因为根据我的经验,元组往往很短并列出很长,但这似乎有点武断,可能不必要的不​​一致。

我会对人们可以给出的任何一个比另一个更好的例子感兴趣。

干杯

2 个答案:

答案 0 :(得分:5)

tuple的初始化(至少在CPython中)产生的字节码少于list - 但它真的没什么值得担心的。我相信会员测试几乎是一样的(尽管没有经过测试)。

对于纯粹的成员资格测试,查找语义是相同的。从Python 2.7开始,它的写入要好得多(并且增加了它仅仅是成员资格测试的含义):

if x in {1, 2, 3}:
    pass # do something

在此之前:

if x in set([1,2,3]):
    pass # do something

看起来有点笨拙......

答案 1 :(得分:0)

list和tuple之间的区别在于列表是可变的,元组是不可变的。

人们倾向于使用元组用于异构集合,类似于C中的结构,并且列表用于同源集合,类似于C中的数组。