>>> x=[1,2]
>>> x[1]
2
>>> x=(1,2)
>>> x[1]
2

它们都有效吗?出于某种原因,你更喜欢哪个?

推荐答案

方括号是lists,括号是tuples.

列表是可变的,这意味着您可以更改其内容:

>>> 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)

然而,this does not mean tuples are mutable.在上面的示例中,通过将两个元组作为参数相加来构造new元组.不修改原始元组.要演示这一点,请考虑以下内容:

>>> 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]

Python相关问答推荐

是否有方法将现有的X-Y图转换为X-Y-Y1图(以重新填充)?

sys.modulesgo 哪儿了?

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

Pythind 11无法弄清楚如何访问tuple元素

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

比较2 PD.数组的令人惊讶的结果

如何让剧作家等待Python中出现特定cookie(然后返回它)?

使用setuptools pyproject.toml和自定义目录树构建PyPi包

Python中绕y轴曲线的旋转

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

什么是最好的方法来切割一个相框到一个面具的第一个实例?

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

Pandas GroupBy可以分成两个盒子吗?

python中csv. Dictreader. fieldname的类型是什么?'

剪切间隔以添加特定日期

在Admin中显示从ManyToMany通过模型的筛选结果

Pandas:填充行并删除重复项,但保留不同的值

Discord.py -

使用__json__的 pyramid 在客户端返回意外格式