目录
1.通用序列操作
1.1 索引
序列的每个元素都分配了一个数字,代表了它在序列中的位置。
Python中的索引从“0”开始,第一个是“0”,第二个是“1”,以此类推。
x = [1,2,3,4]
print(x[0])
print(x[1])
执行结果如下:
1
2
索引不仅可以从左往右编号,也可以从右往左编号。
x = [1,2,3,4]
print(x[-1])
print(x[-3])
执行结果如下:
4
2
1.2切片
Python中所有的数据类型都可以进行切片操作。
# 列表
x = [1,2,3,4,5,6]
print(x[0:3])
print(x[1:3])
# 元组
x2 = (1,2,3,4,5,6)
print(x2[0:3])
print(x2[1:3])
#字符串
x3 = "123456"
print(x3[0:3])
print(x3[1:3])
执行结果如下:
[1,2,3]
[2,3]
(1,2,3)
(2,3)
123
23
从结果可以看出切片操作实现需要提供两个索引作为边界,第一个元素包含在切片内,第二个元素不包含在内。类似于数学区间[a,b)。
同时,切片也支持负数,即从右往左顺序索引获取切片。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4]
print (x1[-3:3])
# 元组
x2 = (1,2,3,4)
print (x2[-3:3])
# 字符串
x3 = "1234"
print (x3[-3:3])
执行结果如下:
[2, 3]
(2, 3)
23
序列的索引下标可以超出其真实的索引长度。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4]
print (x1[1:10])
# 元组
x2 = (1,2,3,4)
print (x2[1:10])
# 字符串
x3 = "1234"
print (x3[1:10])
执行结果如下:
[2, 3, 4]
(2, 3, 4)
234
所有的索引的切片都有个默认的参数“a”,“b”。“a”的默认值为0,“b”的默认值为最后一个元素。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4]
print (x1[3:])
print (x1[:3])
# 元组
x2 = (1,2,3,4)
print (x2[3:])
print (x2[:3])
# 字符串
x3 = "1234"
print (x3[3:])
print (x3[:3])
执行结果如下:
[4]
[1, 2, 3]
(4,)
(1, 2, 3)
4
123
如果切片的两个索引都设置为空,则获取整个序列。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4]
print (x1[:])
# 元组
x2 = (1,2,3,4)
print (x2[:])
# 字符串
x3 = "1234"
print (x3[:])
执行结果如下:
[1, 2, 3, 4]
(1, 2, 3, 4)
1234
根据起始位置和结束位置来获取任意的序列,不过这种序列都是连续的,也可以获取非连续的序列,Python的切片提供了第三个参数:步长。默认情况下为1。如果设置步长为2,得到的序列是从开始到结束每隔“1”个元素的序列。步长的参数不支持“0”。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,5,6]
print (x1[::1])
print (x1[::2])
print (x1[::0])
执行结果如下:
[1, 2, 3, 4, 5, 6]
[1, 3, 5]
Traceback (most recent call last):
File "F:/PYthon/test.py", line 8, in <module>
print (x1[::0])
ValueError: slice step cannot be zero
当负数作为步长时,Python会从序列的尾部开始向左获取元素,直到第一个元素为止。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,5,6]
print (x1[::-1])
print (x1[::-2])
执行结果如下:
[6, 5, 4, 3, 2, 1]
[6, 4, 2]
1.3序列相加
序列之间可以使用“+”进行连接操作。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,]+[5,6,7,8]
print (x1)
执行结果如下:
[1, 2, 3, 4, 5, 6, 7, 8]
不同类型的序列不可以做连接。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,]+(5,6,7,8)
print (x1)
执行结果如下:
TypeError: can only concatenate list (not "tuple") to list
1.4 序列重复
序列之间可以用“*”做乘法。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,] * 3
print (x1)
执行结果如下:
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
1.5 成员资格
成员资格是指判断一个元素是否包含在序列中,Python用运算符“in”来判断。“in”运算符会判断左边的元素是否包含在右边的序列中,如果包含则返回ture,反之,返回false。
# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,5]
print (3 in x1)
print (9 in x1)
执行结果如下:
True
False
注意:只有当元素的类型和值都完全一致,才算包含在序列中,比如数字5和字符串“5”就是两种不同的元素。
# -*- coding: UTF-8 -*-
print (5 in "123456")
执行结果如下:
TypeError: 'in <string>' requires string as left operand, not int
Python解释器要求如果“in”操作符右边是字符串,那么左边也必须是字符串。
1.6 长度,最小值,最大值和求和。
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# 列表
x1 = [1,2,3,4,5,6]
print ("列表长度",len(x1))
print ("列表最小值",min(x1))
print ("列表最大值",max(x1))
print ("列表元素和",sum(x1))
#元组
x2 = (1,2,3,4,5,6)
print ("列表长度",len(x2))
print ("列表最小值",min(x2))
print ("列表最大值",max(x2))
print ("列表元素和",sum(x2))
#字符串
x3 = "123456"
print ("列表长度",len(x3))
print ("列表最小值",min(x3))
print ("列表最大值",max(x3))
print ("列表元素和",sum(x3))
执行结果如下:
Traceback (most recent call last):
File "F:/PYthon/test.py", line 24, in <module>
print ("列表元素和",sum(x3))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
列表长度 6
列表最小值 1
列表最大值 6
列表元素和 21
列表长度 6
列表最小值 1
列表最大值 6
列表元素和 21
列表长度 6
列表最小值 1
列表最大值 6
注意:sum函数求和要求的是序列的元素必须都是"int",由于字符串序列的元素都是字符串,所以sum函数无法对字符串序列求和。
2.列表
2.1 列表更新
列表可以通过索引获取其中的单个元素,也可以通过索引更新其中的元素,使用方法就和变量赋值一样。
# -*- coding: utf-8 -*-
x = [1,2,3,4,5,6]
x[0]=2
print (x)
执行结果如下:
[2, 2, 3, 4, 5, 6]
更新的索引必须是已经存在的索引,不能超出列表长度。
# -*- coding: utf-8 -*-
x = [1,2,3,4,5,6]
x[10]=2
print (x)
执行结果如下:
IndexError: list assignment index out of range
Python解释器会提示我们索引超出列表范围。
2.2 增加元素
列表不能通过索引来添加元素,索引只能修改现有的元素,使用append方法在列表最后添加新元素,append每次只能够增加一个元素,想要增加多个元素,使用extend方法。
# -*- coding: utf-8 -*-
x = [1,2,3,4,5,6]
x.append(7)
print (x)
x.extend([8,9])
print (x)
执行结果如下:
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
append和extend都只能在列表最后添加元素。
insert方法可以在中间插入元素。一次只能够插入一个元素。(也可以在最后添加元素)
# -*- coding: utf-8 -*-
x = [1,2,3,4,5,6]
x.insert(2,3)
print (x)
执行结果如下:
[1, 2, 3, 3, 4, 5, 6]
insert方法需要两个参数,第一个参数表示要插入元素的位置,第二个表示的是要插入元素的值。
2.3 删除元素
1.pop函数可以删除列表的一个元素,默认是最后一个,也可以指定位置。
# -*- coding: utf-8 -*-
x = [1,2,3,4,5,6]
#默认位置
x.pop()
print (x)
#指定位置
x.pop(1)
print (x)
执行结果如下:
[1, 2, 3, 4, 5]
[1, 3, 4, 5]
2.remove函数可以根据内容来删除元素。
remove函数会删除查找到的第一个元素,并且没有返回值。
# -*- coding: utf-8 -*-
x = [1,2,3,4,4,6]
x.remove (4)
print (x)
执行结果如下:
[1, 2, 3, 4, 6]
3.del也可以用来删除列表元素。
del后边指定的是列表的元素和索引。
# -*- coding: utf-8 -*-
x = ["A","B","C","D","E","F","G"]
del x[2]
print (x)
执行结果如下:
['A', 'B', 'D', 'E', 'F', 'G']
2.4 查找元素
index方法用于查找元素在列表中的索引位置。如果查找的元素不在列表,就会报错。
# -*- coding: utf-8 -*-
x = ["A","B","C","D","E","F","G"]
#元素在列表中
print (x.index("A"))
#元素不在列表中
print (x.index("H"))
执行结果如下:
ValueError: 'H' is not in list
0
2.5 队列的其他操作
1.reverse方法可以反转队形。
和[::-1]类似,但是reverse方法修改的是原来的队列,并且没有返回值。
# -*- coding: utf-8 -*-
x = ["A","B","C","D","E","F","G"]
x.reverse()
print (x)
执行结果如下:
['G', 'F', 'E', 'D', 'C', 'B', 'A']
2.count方法用来统计列表中一个元素出现的次数。
# -*- coding: utf-8 -*-
x = [1,2,1,5,2,6,5,5,2,6,6,5,5,2,3,6]
x.count(5)
print (x.count(5))
执行结果如下:
5
3.sort方法用于对列表进行排序。
# -*- coding: utf-8 -*-
x = [1,2,1,5,2,6,5,5,2,6,6,5,5,2,3,6]
x.sort()
print (x)
执行结果如下:
[1, 1, 2, 2, 2, 2, 3, 5, 5, 5, 5, 5, 6, 6, 6, 6]
3.元组
3.1 元组定义
定义元组时只需要用()把元素括起来,每个元素中间用“,”隔开。
如果只有一个元素,后边必须带“,”。否则,不能够定义为元组。
# -*- coding: utf-8 -*-
x = (1,2,3,4,5)
print (x)
print (type(x))
#不带“,”
y = (1)
print (y)
print (type(y))
#带“,”
z = (1,)
print (z)
print (type(z))
执行结果如下:
(1, 2, 3, 4, 5)
<type 'tuple'>
1
<type 'int'>
(1,)
<type 'tuple'>
3.2 删除元组
元组不能够修改,也不能单独的删除元组的某个元素,只能删除整个元组。
# -*- coding: utf-8 -*-
x = (1,2,3,4,5)
del x
print (x)
执行结果如下:
NameError: name 'x' is not defined
这个提示说明变量“x”没有被定义,而我们成功删除了元组x。
3.3 元组的其他操作
1.count方法和列表一样,可以统计某个元素在一个元组中出现的次数。
# -*- coding: utf-8 -*-
x = (1,2,3,4,5,5,4,1,4,5,2,3,6,8)
print (x.count(2))
执行结果如下:
2
2.index方法跟列表中的一样,可以查找某个元素在元组中的索引位置。
# -*- coding: utf-8 -*-
x = (1,2,3,4,5)
print (x.index(3))
执行结果如下:
2
4.字典
4.1 字典定义
字典类型和它的名字一样,可以像查字典一样去查找。其他语言也有类似的类型,如PHP的Array,Java中的HashMap。
# -*- coding: utf-8 -*-
zd = {
"I":"我",
"YOU":"你",
"HE":"他",
"SHE":"她",
}
print (zd,type(zd))
执行结果如下:
{"I": "我", "YOU": "你", "HE": "他", "SHE": "她"}
字典的元素都是成对出现的,(","的左边成为键,右边成为值),元素和元素之间由“,”构成。字典的键必须是唯一的,如果是空字典,可以直接使用{}。
4.2使用字典
在Python中,字典其实就是一组键值对。字典和列表都是可修改结构,对字典的修改和列表类似。
# -*- coding: utf-8 -*-
zd = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
zd["HE"] = "他们"
print (zd)
执行结果如下:
{"I": "我", "YOU": "你", "HE": "他们", "SHE": "她"}
删除字典中的元素
# -*- coding: utf-8 -*-
zd = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
del zd["HE"]
print (zd)
执行结果如下:
{"I": "我", "YOU": "你", "SHE": "她"}
4.3 字典的其他操作
1.clear可以用于清空字典的所有元素。
# -*- coding: utf-8 -*-
zd = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
zd.clear()
print (zd)
执行结果如下:
{}
2.使用copy方法完整的复制了新的副本。
# -*- coding: utf-8 -*-
zd1 = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
zd2 = zd1.copy()
print (zd1)
del zd2["SHE"]
print (zd2)
执行结果如下:
{'I': '我', 'YOU': '你', 'HE': '他们', 'SHE': '她'}
{'I': '我', 'YOU': '你', 'HE': '他们'}
使用copy对获取到的字典做修改,原字典不受影响。
3.fromkeys方法用于创建一个新字典,用序列中的元素作为键,第二个参数为字典所有参数对应的初始值。
# -*- coding: utf-8 -*-
seq =("red","black","blue")
#不指定默认值
color1 = dict.fromkeys(seq)
print (color1)
#指定默认值
color2 = dict.fromkeys(seq,6)
print (color2)
{'red': None,'black': None,'blue': None}
{'red': 6,'black': 6,'blue': 6}
4.使用get方法返回键对应的值,如果字典不存在对应的键值则返回默认值。
# -*- coding: utf-8 -*-
zd1 = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
print (zd1.get("HE"))
print (zd1.get("IT"))
print (zd1.get("IT","未知"))
执行结果如下:
HE : 他
IT : None
IT : 未知
5.使用keys方法返回一个列表,里面包含了字典的所有键。
# -*- coding: utf-8 -*-
zd1 = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
print(zd1.keys())
执行结果如下:
dict_keys(['I', 'YOU', 'HE', 'SHE'])
6.使用values方法返回一个列表,里边包含了字典的所有值。
# -*- coding: utf-8 -*-
zd1 = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
print(zd1.values())
执行结果如下:
dict_values(['我', '你', '他', '她'])
7.使用items方法返回一个列表,里边包含了所有键的列表和所有值的列表。
# -*- coding: utf-8 -*-
zd1 = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
print(zd1.items())
执行结果如下:
dict_items([('I': '我'), ('YOU': '你'),('HE': '他'),('SHE': '她')])
由于字典不能直接应用于for循环,可以使用items方法来遍历字典。
# -*- coding: utf-8 -*-
zd1 = {
"I": "我",
"YOU": "你",
"HE": "他",
"SHE": "她",
}
for k ,v in zd1.items():
print(k, "=>",v)
执行结果如下:
I => 我
YOU => 你
HE => 他
SHE => 她