问题:用括号括起来的列表和括号在Python中有什么区别?
>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2
它们都有效吗?是出于某些原因而首选?
回答 0
列表是可变的,这意味着您可以更改其内容:
>>> x = [1,2]
>>> x.append(3)
>>> x
[1, 2, 3]
而元组不是:
>>> x = (1,2)
>>> x
(1, 2)
>>> x.append(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
另一个主要区别是元组是可哈希的,这意味着您可以将其用作字典的键。例如:
>>> x = (1,2)
>>> y = [1,2]
>>> z = {}
>>> z[x] = 3
>>> z
{(1, 2): 3}
>>> z[y] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
请注意,正如许多人指出的那样,您可以将元组加在一起。例如:
>>> x = (1,2)
>>> x += (3,)
>>> x
(1, 2, 3)
但是,这并不意味着元组是可变的。在上面的示例中,通过将两个元组作为参数相加来构造新的元组。原始元组未修改。为了证明这一点,请考虑以下因素:
>>> x = (1,2)
>>> y = x
>>> x += (3,)
>>> x
(1, 2, 3)
>>> y
(1, 2)
而如果您要使用列表构造相同的示例,则y
也会进行更新:
>>> x = [1, 2]
>>> y = x
>>> x += [3]
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
回答 1
一个有趣的区别:
lst=[1]
print lst // prints [1]
print type(lst) // prints <type 'list'>
notATuple=(1)
print notATuple // prints 1
print type(notATuple) // prints <type 'int'>
^^ instead of tuple(expected)
即使只包含一个值,逗号也必须包含在元组中。例如(1,)
代替(1)
。
回答 2
它们不是列表,而是列表和元组。您可以在Python教程中阅读有关元组的信息。尽管您可以对列表进行变异,但是使用元组是不可能的。
In [1]: x = (1, 2)
In [2]: x[0] = 3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/user/<ipython console> in <module>()
TypeError: 'tuple' object does not support item assignment
回答 3
方括号和括号的另一种不同之处是方括号可以描述列表的理解,例如 [x for x in y]
相应的括号语法指定一个元组生成器:(x for x in y)
您可以使用以下方法获取元组理解: tuple(x for x in y)
回答 4
回答 5
逗号分隔由包含的项目 (
和)
是tuple
S,那些由封闭[
和]
是list
秒。