1. 序列类型
序列类型,一维元素向量,元素之间存在先后关系,通过序号访问。
序列类型的通用操作符和函数如下:
操作符 | 描述 |
---|---|
x in s | 如果 x 是 s 的元素,返回True,否则返回False |
x not in s | 如果 x 不是 s 的元素,返回True,否则返回False |
s + t | 连接 s 和 t |
s * n 或 n * s | 将序列 s 赋值 n 次 |
s[ i ] | 索引,i为正时返回序列的第 i+1 个元素,为负时返回倒数第(-i)个元素 |
s[ i : j ] | 分片,返回包含序列 s 第 i 到 j 个(不包括第 j 个)元素的子序列 |
s[ i : j : k ] | 步骤分片,返回包含序列 s 第 i 到 j 个,以 k 为步长的子序列 |
len(s) | 序列 s 的元素个数(长度) |
min(s) | 序列 s 的最小元素 |
max(s) | 序列 s 的最大元素 |
s.index(x[, i[, j]]) | 序列 s 中从 i 到 j 位置中第一次出现元素 x 的位置 |
s.count(x) | 序列 s 中出现 x 的总次数 |
1.1 字符串(str)
字符串是 Python 中最常用的数据类型。我们可以使用引号( ' 或 " )来创建字符串。
Python不支持单字符类型,单字符在Python中也是作为一个字符串使用。Python访问子字符串,可以使用方括号来截取字符串。
str = "do you want to build a snowman"
print(str) # do you want to build a snowman
print(str[15 : ]) # build a snowman
print(str[3 : 6]) # you
字符串常用的内建函数:
# 1
# string.count(str, beg=0, end=len(string))
# 返回字符串中str出现的次数,范围可设定
>>> str1 = "综合,综合,理工,社科,农业,理工,综合"
>>> str2 = "综合"
>>> str1.count(str2)
3
>>> str1.count(str2, 3)
2
>>> str1.count(str2, 3, 6)
1
# 2
# join(seq)
# 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
>>> seq = "橘子","苹果","橙子"
>>> string = "ya"
>>> string.join(seq)
'橘子ya苹果ya橙子'
# 3
# split(str="", num=string.count(str))
# 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
# 返回值是一个以所截取的字符串构成的列表
>>> string = "1,2,3,45,67,890"
>>> string.split(",")
['1', '2', '3', '45', '67', '890']
1.2 元组(tuple)
元组是序列类型中比较特殊的类型,一旦创建就不会被修改。
Python中元组采用逗号和圆括号来表示。
tuple1 = "haha", "xixi", "houhou"
tuple2 = ("haha", "xixi", "houhou")
print(tuple1) #('haha', 'xixi', 'houhou')
print(tuple2) #('haha', 'xixi', 'houhou')
print(tuple1[1]) #xixi
print(tuple1[1][2]) #x
一个元组可以作为另一个元组的元素。(可嵌套)
tuple3 = "haha", "xixi", ("houhou", "biubiu")
print(tuple3[2][1]) #biubiu
元组类型在表达固定数据项、函数多返回值、多变量同步赋值、循环遍历等情况下十分有用。
def func(x): #函数返回值
return x, x**3
a, b = 'houhou', 'biubiu' #多变量同步赋值
a, b = (b, a) #多变量同步赋值,括号可省略
import math
for x, y in ((1, 0), (2, 5), (3, 8)): #循环遍历
print(math.hypot(x, y)) #求多个坐标到原点的距离
'''
输出:
1.0
5.385164807134504
8.54400374531753
'''
1.3 列表(list)
列表是包含零个或多个对象引用的有序序列。
列表的长度和内容都是可变的,可自由对列表的数据项进行增加、删除或者替换。
列表没有长度限制,元素类型可以不同,使用非常灵活。
列表可以同时使用正向递增序号和反向递减序号,可以采用标准的比较操作符(<、<=、==、!=、>=、>)进行比较,列表的比较实际上是单个数据项的逐个比较。
列表用中括号([])表示,也可以通过 list() 函数将元组或者字符串转换成列表(直接使用 list() 会返回一个空列表)。
函数或方法 | 描述 |
---|---|
ls[i] = x | 替换列表 ls 第 i 项数据为 x |
ls[i : j] = lt | 用列表 lt 替换列表 ls 中第 i 到 j 项(不包含第 j 项,可以设置步长k,下同) |
del ls[i : j] | 删除列表 lt 替换列表 ls 中第 i 到 j 项数据,等价于 ls[i : j] = [] |
ls += lt 或 ls.extend(lt) | 将 lt 元素添加到列表 ls 中 |
ls *= n | 更新列表,其元素重复 n 次 |
ls.append(x) | 在列表最后增加一个元素 x |
ls.clear() | 删除 ls 中的所有元素 |
ls.copy() | 生成一个新的列表,赋值 ls 中的所有元素 |
ls.insert(i, x) | 在列表 ls 的第 i 位置增加元素 x |
ls.pop(i) | 将列表 ls 中的第 i 项元素取出并删除该元素 |
ls.remove(x) | 将列表中出现的第一个元素 x 删除 |
ls.reverse() | 列表中的元素反转 |
2. 集合类型
2.1 集合(set)
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合中的元素不可重复,元素类型只能是固定数据类型,例如整数、浮点数、字符串、元组等,列表、字典和集合类型本身都是可变数据类型,不能作为集合的元素出现。
Python 编译器中界定固定数据类型与否主要考察类型是是否能进行哈希运算。能够进行哈希运算的类型都可以作为集合元素。
哈希运算可以将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是对数据一种有损且紧凑的表达形式,哈希是数据在另一个数据维度的表现。
操作符 | 描述 |
---|---|
S-T 或 S.difference(T) | 返回一个新集合,包括在集合 S 中但不在不在集合 T 中的元素(S - S∩T) |
S-=T 或 S.difference_update(T) | 更新集合 S,包括在集合 S 中但不在集合 T 中的元素 |
S&T 或 S.intersection(T) | 返回一个新集合,包括同时在集合 S 和 T 中的元素(S∩T) |
S&=T 或 S.intersection_update(T) | 更新集合 S,包括同时在集合 S 和 T 中的元素 |
S^T 或 S.symmetric_difference(T) | 返回一个新集合,包括集合 S 和 T 中的元素,但不包括同时在两者之中的元素(S∪T - S∩T) |
S=^T 或 S.symmetric_difference_update(T) | 略 |
S|T 或 S.union(T) | 返回一个新集合,包括集合 S 和 T中的所有元素(S∪T) |
S=|T 或 S.update(T) | 略 |
S<=T 或 S.issubset(T) | 如果 S 和 T 相同或 S 是 T 的子集,返回 True,否则返回 False,可以用 S<T 判断 S 是否是 T 的真子集 |
S>=T 或 S.issuperset(T) | 如果 S 和 T 相同或 S 是 T 的超集,返回 True,否则返回 False,可以用 S>T 判断 S 是否是 T 的真超集 |
3. 映射类型
3.1 字典(map/dictionary)
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号分割,每个对之间用逗号分割,整个字典包括在花括号({})中 。
添加一个新的键值对可以直接写:dict[new_key] = new_value
d = {"数学":101, "语文":202, "英语":203, "物理":204, "生物":206}
d.update({"化学":205}) #d["化学"]=205
d["数学"] =201
d.pop("生物") #del d["生物"]
for k in d:
print("{}:{}".format(d[k], k))
!! Python 3.X 里不包含 has_key() 函数,被 __contains__(key) 替代
函数或方法 | 功能 | 返回值 |
---|---|---|
cmp(dict1, dict2) | 比较两个字典元素 | |
len(dict) | 计算字典元素个数,即键的总数 | |
str(dict) | 输出字典可打印的字符串表示 | |
dict.clear() | 删除字典内的所有元素 | |
dict.copy() | 返回一个字典的浅复制 | |
dict.fromkeys(seq [, val]) | 创建一个新字典,以序列seq中的元素做字典的键,val为字典所有键对应的初始值 | |
dict.get(key, default = None) | 返回指定键值,如果值不在字典中返回default的值 | |
dict.has_key(key) | 判断键key是否存在于字典dict中 | |
dict.items() | 以列表的返回可遍历的(键,值)元组数组 | |
dict.keys() | 以列表的形式返回一个字典所有的键 | |
dict.setdefault(key, default = None) | 和get()类似,但如果键不存在与字典中,将会添加键并将值设为default | |
dict1.update(dict2) | 把dict2的键值对更新到dict1中 | |
dict.values() | 以列表的形式返回字典中的所有值 | |
pop(key [,default]) | 删除字典给定键key所对应的值,返回值为北删除的值,key必须给出,否则返回default | |
popitem() | 随机返回并删除字典中的一对键和值 |
参考:http://www.runoob.com/python/python-dictionary.html