在Python中,花括号和方括号有什么区别?

72

在Python中,花括号和方括号有什么区别?

A ={1,2}
B =[1,2]

当我在终端上打印AB时,它们没有区别。这是真的吗?

有时,我注意到一些代码使用{}[]来初始化不同的变量。

例如:A=[]B={}

它们之间有什么区别吗?

3个回答

106

花括号可以创建 字典 或者 集合。方括号可以创建 列表

它们被称为 字面量;一个集合字面量:

aset = {'foo', 'bar'}

或者是一个字典字面值:
adict = {'foo': 42, 'bar': 81}
empty_dict = {}

或者一个列表字面值:
alist = ['foo', 'bar', 'bar']
empty_list = []

要创建一个空集,你只能使用set()
集合是由唯一元素组成的集合,无法排序。列表是有序的元素序列,值可以重复。字典将键映射到值,键必须是唯一的。集合和字典的键还必须满足其他限制,以便Python可以有效地跟踪它们并知道它们是唯一的且将保持不变。
还有tuple类型,使用逗号表示1个或多个元素,在许多情况下括号是可选的:
atuple = ('foo', 'bar')
another_tuple = 'spam',
empty_tuple = ()
WARNING_not_a_tuple = ('eggs')

注意在another_tuple定义中的逗号;正是这个逗号使它成为一个tuple,而不是括号。 WARNING_not_a_tuple不是元组,它没有逗号。没有括号,你只剩下一个字符串。
有关更多详细信息,请参见Python教程中的数据结构章节;列表在介绍章节中介绍。
此类容器的文字也称为显示,语法允许基于循环进行内容的过程化创建,称为推导式

16

他们创建不同类型。

>>> type({})
<type 'dict'>
>>> type([])
<type 'list'>
>>> type({1, 2})
<type 'set'>
>>> type({1: 2})
<type 'dict'>
>>> type([1, 2])
<type 'list'>

我很好奇当我同时使用 {1,2} 和 [1,2] 进行排序等操作时,这两者之间是否有更好的选择? - Haoyu Chen
1
集合是无序的,并且会删除重复的值。除此之外,将它们传递给排序函数不太可能有太大的区别。您可以使用.sort()在原地对列表进行排序。 - Daenyth
1
type((1, 2)) <class 'tuple'>
- Tom J

1
这两个大括号有不同的用途。如果你只是想要一个包含一些元素并通过索引号(从0开始)组织它们的列表,只需使用[]并根据需要添加元素即可。 {}很特别,因为您可以为值提供自定义ID,例如a = {"John": 14}。现在,您可以通过a["John"]访问John的年龄,而不是制作一个带有年龄和记住谁在哪里的列表。 []称为列表,{}称为字典(在Python中)。 字典基本上是列表的一种方便形式,可以让您以更轻松的方式访问数据。
但是,字典有一个问题。很多时候,您放入字典中的数据不会保持与之前相同的顺序。因此,当您逐个遍历每个值时,它不会按您期望的顺序排列。 有一个特殊的字典可以解决这个问题,但您必须添加这行from collections import OrderedDict,并将{}替换为OrderedDict()。 但是,我认为您现在不需要担心这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接