集合类型
Python 中有许多集合类型。虽然 int
和 str
等类型包含单个值,但集合类型包含多个值。
清单
list
类型可能是 Python 中最常用的集合类型。尽管它的名字,列表更像是其他语言中的数组,主要是 JavaScript。在 Python 中,列表只是有效 Python 值的有序集合。可以通过在方括号中用逗号分隔值来创建列表:
int_list = [1, 2, 3]
string_list = ['abc', 'defghi']
列表可以为空:
empty_list = []
列表的元素不限于单个数据类型,这是合理的,因为 Python 是一种动态语言:
mixed_list = [1, 'abc', True, 2.34, None]
列表可以包含另一个列表作为其元素:
nested_list = [['a', 'b', 'c'], [1, 2, 3]]
可以通过索引或其位置的数字表示来访问列表的元素。Python 中的列表是*零索引的,*这意味着列表中的第一个元素位于索引 0 处,第二个元素位于索引 1 处,依此类推:
names = ['Alice', 'Bob', 'Craig', 'Diana', 'Eric']
print(names[0]) # Alice
print(names[2]) # Craig
指数也可以是负数,这意味着从列表的末尾开始计数(-1
是最后一个元素的索引)。因此,使用上面示例中的列表:
print(names[-1]) # Eric
print(names[-4]) # Bob
列表是可变的,因此你可以更改列表中的值:
names[0] = 'Ann'
print(names)
# Outputs ['Ann', 'Bob', 'Craig', 'Diana', 'Eric']
此外,可以从列表中添加和/或删除元素:
使用 L.append(object)
将对象附加到列表末尾,返回 None
。
names = ['Alice', 'Bob', 'Craig', 'Diana', 'Eric']
names.append("Sia")
print(names)
# Outputs ['Alice', 'Bob', 'Craig', 'Diana', 'Eric', 'Sia']
在特定索引处添加要列出的新元素。L.insert(index, object)
names.insert(1, "Nikki")
print(names)
# Outputs ['Alice', 'Nikki', 'Bob', 'Craig', 'Diana', 'Eric', 'Sia']
使用 L.remove(value)
删除第一次出现的值,返回 None
names.remove("Bob")
print(names) # Outputs ['Alice', 'Nikki', 'Craig', 'Diana', 'Eric', 'Sia']
获取值为 x 的第一个项目列表中的索引。如果没有这样的项目,它将显示错误。
name.index("Alice")
0
计算列表的长度
len(names)
6
计算列表中任何项目的出现次数
a = [1, 1, 1, 2, 3, 4]
a.count(1)
3
翻转清单
a.reverse()
[4, 3, 2, 1, 1, 1]
# or
a[::-1]
[4, 3, 2, 1, 1, 1]
使用 L.pop([index])
删除并返回索引处的项目(默认为最后一项),返回该项目
names.pop() # Outputs 'Sia'
你可以迭代列表元素,如下所示:
for element in my_list:
print (element)
元组
tuple
类似于列表,除了它是固定长度和不可变的。因此,元组中的值不能更改,也不能将值添加到元组或从元组中删除。元组通常用于不需要更改的小型值集合,例如 IP 地址和端口。元组用括号表示而不是方括号:
ip_address = ('10.20.30.40', 8080)
列表的相同索引规则也适用于元组。元组也可以嵌套,值可以是任何有效的 Python 有效。
必须以这种方式定义只有一个成员的元组(注意逗号):
one_member_tuple = ('Only member',)
要么
one_member_tuple = 'Only member', # No brackets
或者只是使用 tuple
语法
one_member_tuple = tuple(['Only member'])
字典
Python 中的 dictionary
是键值对的集合。字典被花括号包围。每对用逗号分隔,键和值用冒号分隔。这是一个例子:
state_capitals = {
'Arkansas': 'Little Rock',
'Colorado': 'Denver',
'California': 'Sacramento',
'Georgia': 'Atlanta'
}
要获取值,请通过其键引用它:
ca_capital = state_capitals['California']
你还可以获取字典中的所有键,然后迭代它们:
for k in state_capitals.keys():
print('{} is the capital of {}'.format(state_capitals[k], k))
字典非常类似于 JSON 语法。Python 标准库中的本机 json
模块可用于在 JSON 和字典之间进行转换。
组
set
是元素的集合,没有重复,没有插入顺序,但排序顺序。它们用于以下情况:将某些事物组合在一起非常重要,而不是包含它们的顺序。对于大型数据组,检查元素是否在 set
中要比对 list
执行相同操作要快得多。
定义 set
非常类似于定义 dictionary
:
first_names = {'Adam', 'Beth', 'Charlie'}
或者你可以使用现有的 list
构建一个 set
:
my_list = [1,2,3]
my_set = set(my_list)
使用 in
检查 set
的成员资格:
if name in first_names:
print(name)
你可以像列表一样遍历 set
,但请记住:值将以任意实现定义的顺序进行。
defaultdict
defaultdict
是一个具有键默认值的字典,因此可以无错误地访问未明确定义任何值的键。当字典中的值是集合(列表,字符串等)时,defaultdict
特别有用,因为每次使用新密钥时都不需要初始化它。
defaultdict
永远不会引发 KeyError。任何不存在的键都会返回默认值。
例如,请考虑以下字典
>>> state_capitals = {
'Arkansas': 'Little Rock',
'Colorado': 'Denver',
'California': 'Sacramento',
'Georgia': 'Atlanta'
}
如果我们尝试访问一个不存在的键,python 会返回一个错误,如下所示
>>> state_capitals['Alabama']
Traceback (most recent call last):
File "<ipython-input-61-236329695e6f>", line 1, in <module>
state_capitals['Alabama']
KeyError: 'Alabama'
让我们尝试一下 defaultdict
。它可以在 collections 模块中找到。
>>> from collections import defaultdict
>>> state_capitals = defaultdict(lambda: 'Boston')
我们在这里做的是设置一个默认值( 波士顿 ),以防 Give 键不存在。现在像以前一样填充 dict:
>>> state_capitals['Arkansas'] = 'Little Rock'
>>> state_capitals['California'] = 'Sacramento'
>>> state_capitals['Colorado'] = 'Denver'
>>> state_capitals['Georgia'] = 'Atlanta'
如果我们尝试使用不存在的密钥访问 dict,python 将返回默认值,即 Boston
>>> state_capitals['Alabama']
'Boston'
并返回现有键的创建值,就像普通的 dictionary
一样
>>> state_capitals['Arkansas']
'Little Rock'