Python序列是指按特定顺序依次排列的一组数据,包括列表(list),元组(tuple),字典(dict),集合(set).
其中,list和tuple是按顺序保存元素,所有元素占用一块连续的内存,可以通过索引来访问,类似于C语言的数组。list和tuple的区别是list可以修改,后者不行。
dict和set存储的数据都是无序的,dict元素以key-value的形式保存。
序列索引
类似于C语言的数组下标,但是Python有负数,从右向左计数,即最后一个元素为-1。
//支持中文
str="测试数据"
print("str[-2]","==",str[-2])
print("str[3]","==",str[3])
//输出结果
str[-2] == 数
str[3] == 据
序列切片
序列实现切片操作的语法格式如下:
sname[start : end : step]
其中,各个参数的含义分别是:
- sname:表示序列的名称;
- start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;
- end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
- step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。
序列相加
使用“+”
序列相乘
使用数字 n 乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果
in/not in-检查是否包含元素
序列相关内置函数
函数 | 功能 |
len() | 计算序列的长度,即返回序列中包含多少个元素。 |
max() | 找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。 |
min() | 找出序列中的最小元素。 |
list() | 将序列转换为列表。 |
str() | 将序列转换为字符串。 |
sum() | 计算元素和。 |
sorted() | 对元素进行排序。 |
reversed() | 反向序列中的元素。 |
enumerate() | 将序列组合为一个索引序列,多用在 for 循环中。 |
list
- 创建
1.使用[]创建列表
如 list_a=[2,4,5,6,7,8]
2.使用list()函数创建列表
可以将字符串、元组、字典、区间转换成列表
如 list_b = list("hello world")
- 访问
1、直接用索引,类似于C语言的数组
比如list_a[2]
2、使用切片访问
比如print(list_a[2:5:1]) #第2到第5,步长为1
- 删除
del 列表名
如 del list_a
- 添加
1、append()
比如 list_a.append(7)
2、extend() 它和append()的区别:extend() 不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中。
3、insert(index,obj) 与上述2个方法不同的是,insert()可以插入到指定位置
如 list_a.insert(2,100)
- 删除元素
1、删除单个元素
del list_a[index]
2、删除连续元素,从start到end,不包括end
del list+_a[start:end]
3、pop(index) 删除索引处元素,缺省时为最后一个元素
list_a.pop(index)
4、remove(val) 删除指定元素,只匹配一次
5、clear() 删除列表里的所有元素
- 修改元素
1、修改单个元素,直接赋值
如 list_a[2] = 55
2、修改连续元素,使用切片方式
如 list_a[1:4] =[40,50,60,70]
- 查找元素
1、index()方法,格式如下:
listname.index(obj, start, end)
start 和 end 参数用来指定检索范围:
start 和 end 可以都不写,此时会检索整个列表;
如果只写 start 不写 end,那么表示检索从 start 到末尾的元素;
如果 start 和 end 都写,那么表示检索 start 和 end 之间的元素。
2、count()方法,统计某个元素在列表中出现的次数
listname.count(obj)
tuple 元组
tuple与list的区别在于,list创建完成后元素可以修改,tuple创建完成后不能修改,可以把tuple看成不可变的list。
- 创建
1、使用()创建
如 tuple_a = (1,2,3,4,6)
当元组中只有一个元素时,该元素后面必须加逗号,如tuple_b=("teststring",)
2、使用tuple()函数创建,tuple(data)
如
#将字符串转换成元组
tup1 = tuple("hello")
print(tup1)
#将列表转换成元组
list1 = ['Python', 'Java', 'C++', 'JavaScript']
tup2 = tuple(list1)
print(tup2)
#将字典转换成元组
dict1 = {'a':100, 'b':42, 'c':9}
tup3 = tuple(dict1)
print(tup3)
#将区间转换成元组
range1 = range(1, 6)
tup4 = tuple(range1)
print(tup4)
#创建空元组
print(tuple())
- 访问
使用索引和切片方式,和list一致
- 修改--不支持,只能重新赋值
- 删除 del tuplename
dict
类似于C++的map
主要特征 | 解释 |
通过键而不是通过索引来读取元素 | 字典类型有时也称为关联数组或者散列表(hash)。它是通过键将一系列的值联系起来的,这样就可以通过键从字典中获取指定项,但不能通过索引来获取。 |
字典是任意数据类型的无序集合 | 和列表、元组不同,通常会将索引值 0 对应的元素称为第一个元素,而字典中的元素是无序的。 |
字典是可变的,并且可以任意嵌套 | 字典可以在原处增长或者缩短(无需生成一个副本),并且它支持任意深度的嵌套,即字典存储的值也可以是列表或其它的字典。 |
字典中的键必须唯一 | 字典中,不支持同一个键出现多次,否则只会保留最后一个键值对。 |
字典中的键必须不可变 | 字典中每个键值对的键是不可变的,只能使用数字、字符串或者元组,不能使用列表。 |
- 创建
1、使用{}创建,包含key和value,之间用:分隔
如 dict_a={'key1':'val1','key2':'val2'}
#使用字符串作为key
scores = {'数学': 95, '英语': 92, '语文': 84}
print(scores)
#使用元组和数字作为key
dict1 = {(20, 30): 'great', 30: [1,2,3]}
print(dict1)
#创建空元组
dict2 = {}
print(dict2)
2、通过fromkeys()方法创建字典dictname = dict.fromkeys(list,value=None)
knowledge = ['语文', '数学', '英语']
scores = dict.fromkeys(knowledge, 60)
3、通过dict()映射函数创建
创建格式 | 注意事项 |
a = dict(str1=value1, str2=value2, str3=value3) | str 表示字符串类型的键,value 表示键对应的值。使用此方式创建字典时,字符串不能带引号。 |
#方式1 demo = [('two',2), ('one',1), ('three',3)] #方式2 demo = [['two',2], ['one',1], ['three',3]] #方式3 demo = (('two',2), ('one',1), ('three',3)) #方式4 demo = (['two',2], ['one',1], ['three',3]) a = dict(demo) | 向 dict() 函数传入列表或元组,而它们中的元素又各自是包含 2 个元素的列表或元组,其中第一个元素作为键,第二个元素作为值。 |
keys = ['one', 'two', 'three'] #还可以是字符串或元组 values = [1, 2, 3] #还可以是字符串或元组 a = dict( zip(keys, values) ) | 通过应用 dict() 函数和 zip() 函数,可将前两个列表转换为对应的字典。 |
- 访问
1、使用key来作为索引,dictname[key]
2、使用get(key,default)函数,当键不存在时返回default,也可缺省
- 删除
del dictname
- 添加键值对
直接用键值赋值的方式dictname[key]=value
如 dict_a['test']=0
- 删除指定键值对
使用del
如 del dict_a['test']
- 修改现有的键值对
指修改键值对中的值
如 dict_a['test']=2
- 判断是否存在指定键值对
in/not in 判断是否有key
a = {'数学': 95, '语文': 89, '英语': 90}
# 判断 a 中是否包含名为'数学'的key
print('数学' in a) # True
# 判断 a 是否包含名为'物理'的key
print('物理' in a) # False
- keys()、values()、items()
keys() 方法用于返回字典中的所有键(key);
values() 方法用于返回字典中所有键对应的值(value);
items() 用于返回字典中所有的键值对(key-value)
可以使用以下方法来使用上述方法返回的数据
1、使用list(),将数据数据转换成列表
a = {'数学': 95, '语文': 89, '英语': 90}
b = list(a.keys())
print(b)
//['数学', '语文', '英语']
2、使用for in循环遍历其返回值
a = {'数学': 95, '语文': 89, '英语': 90}
for k in a.keys():
print(k,end=' ')
print("\n---------------")
for v in a.values():
print(v,end=' ')
print("\n---------------")
for k,v in a.items():
print("key:",k," value:",v)
copy()方法 复制原数据
update()方法 使用一个字典所包含的键值对来更新已有的字典,不存在的会直接添加进去
pop()和popitem()方法
pop() 和 popitem() 都用来删除字典中的键值对,不同的是,pop() 用来删除指定的键值对,而 popitem() 用来随机删除一个键值对,它们的语法格式如下:
dictname.pop(key)
dictname.popitem()
其中,dictname 表示字典名称,key 表示键。
setdefault()方法
如果该 key 存在,那么直接返回该 key 对应的 value;
如果该 key 不存在,那么先为该 key 设置默认的 defaultvalue,然后再返回该 key 对应的 defaultvalue。
set
和C++里的set类似,都是保存的不重复的元素,但是只能存放相同类型的数据
- 创建
1、使用{}创建
2、set()函数创建集合
- 访问
使用for循环取出
如
a = {1,'c',1,(1,2,3),'c'}
for ele in a:
print(ele,end=' ')
- 删除 del()
- 添加元素
setname.add(element)
- 删除元素
setname.remove(element)
- 集合运算:交集、并集、差集
表 1 Python set集合运算
运算操作 | Python运算符 | 含义 | 例子 |
交集 | & | 取两集合公共的元素 | >>> set1 & set2 {3} |
并集 | | | 取两集合全部的元素 | >>> set1 | set2 {1,2,3,4,5} |
差集 | - | 取一个集合中另一集合没有的元素 | >>> set1 - set2 {1,2} >>> set2 - set1 {4,5} |
对称差集 | ^ | 取集合 A 和 B 中不属于 A&B 的元素 | >>> set1 ^ set2 {1,2,4,5} |
set集合方法
set方法
方法名 | 语法格式 | 功能 | 实例 |
add() | set1.add() | 向 set1 集合中添加数字、字符串、元组或者布尔类型 | >>> set1 = {1,2,3} >>> set1.add((1,2)) >>> set1 {(1, 2), 1, 2, 3} |
clear() | set1.clear() | 清空 set1 集合中所有元素 | >>> set1 = {1,2,3} >>> set1.clear() >>> set1 set() set()才表示空集合,{}表示的是空字典 |
copy() | set2 = set1.copy() | 拷贝 set1 集合给 set2 | >>> set1 = {1,2,3} >>> set2 = set1.copy() >>> set1.add(4) >>> set1 {1, 2, 3, 4} >>> set1 {1, 2, 3} |
difference() | set3 = set1.difference(set2) | 将 set1 中有而 set2 没有的元素给 set3 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set3 = set1.difference(set2) >>> set3 {1, 2} |
difference_update() | set1.difference_update(set2) | 从 set1 中删除与 set2 相同的元素 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set1.difference_update(set2) >>> set1 {1, 2} |
discard() | set1.discard(elem) | 删除 set1 中的 elem 元素 | >>> set1 = {1,2,3} >>> set1.discard(2) >>> set1 {1, 3} >>> set1.discard(4) {1, 3} |
intersection() | set3 = set1.intersection(set2) | 取 set1 和 set2 的交集给 set3 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set3 = set1.intersection(set2) >>> set3 {3} |
intersection_update() | set1.intersection_update(set2) | 取 set1和 set2 的交集,并更新给 set1 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set1.intersection_update(set2) >>> set1 {3} |
isdisjoint() | set1.isdisjoint(set2) | 判断 set1 和 set2 是否没有交集,有交集返回 False;没有交集返回 True | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set1.isdisjoint(set2) False |
issubset() | set1.issubset(set2) | 判断 set1 是否是 set2 的子集 | >>> set1 = {1,2,3} >>> set2 = {1,2} >>> set1.issubset(set2) False |
issuperset() | set1.issuperset(set2) | 判断 set2 是否是 set1 的子集 | >>> set1 = {1,2,3} >>> set2 = {1,2} >>> set1.issuperset(set2) True |
pop() | a = set1.pop() | 取 set1 中一个元素,并赋值给 a | >>> set1 = {1,2,3} >>> a = set1.pop() >>> set1 {2,3} >>> a 1 |
remove() | set1.remove(elem) | 移除 set1 中的 elem 元素 | >>> set1 = {1,2,3} >>> set1.remove(2) >>> set1 {1, 3} >>> set1.remove(4) Traceback (most recent call last): File "<pyshell#90>", line 1, in <module> set1.remove(4) KeyError: 4 |
symmetric_difference() | set3 = set1.symmetric_difference(set2) | 取 set1 和 set2 中互不相同的元素,给 set3 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set3 = set1.symmetric_difference(set2) >>> set3 {1, 2, 4} |
symmetric_difference_update() | set1.symmetric_difference_update(set2) | 取 set1 和 set2 中互不相同的元素,并更新给 set1 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set1.symmetric_difference_update(set2) >>> set1 {1, 2, 4} |
union() | set3 = set1.union(set2) | 取 set1 和 set2 的并集,赋给 set3 | >>> set1 = {1,2,3} >>> set2 = {3,4} >>> set3=set1.union(set2) >>> set3 {1, 2, 3, 4} |
update() | set1.update(elem) | 添加列表或集合中的元素到 set1 | >>> set1 = {1,2,3} >>> set1.update([3,4]) >>> set1 {1,2,3,4} |
frozenset(set集合的不可变版本)