1、列表和元组操作
定义列表
names = ['Severen',"Peter",'Bob']
通过下标访问列表中的元素,下标从0开始计数
>>> names[0]
'Severen'
>>> names[2]
'Bob'
>>> names[-1]
'Bob'
>>> names[-2] #还可以倒着取
'Peter'
切片:取多个元素
>>> names = ["Severen","Peter","Bob","John","Tom","Cat"]
>>> names[1:4] #取下标1至下标4之间的数字,包括1,不包括4
['Peter', 'Bob', 'John']
>>> names[1:-1] #取下标1至-1的值,不包括-1
['Peter', 'Bob', 'John', 'Tom']
>>> names[0:3]
['Severen', 'Peter', 'Bob']
>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
['Severen', 'Peter', 'Bob']
>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
['John', 'Tom', 'Cat']
>>> names[3:-1] #这样-1就不会被包含了
['John', 'Tom']
>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
['Severen', 'Bob', 'Tom']
>>> names[::2] #和上句效果一样
['Severen', 'Bob', 'Tom']
追加
>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat']
>>> names.append("IamNew")
>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']
插入
>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.insert(2, '强行从Bob前面插入')
>>> names
['Severen', 'Peter', '强行从Bob前面插入', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.insert(4, '强行从Bob后面插入')
>>> names
['Severen', 'Peter', '强行从Bob前面插入', 'Bob', '强行从Bob后面插入', 'John', 'T
om', 'Cat', 'IamNew']
修改
>>> names
['Severen', 'Peter', '强行从Bob前面插入', 'Bob', '强行从Bob后面插入', 'John', 'T
om', 'Cat', 'IamNew']
>>> names[2] = '该换人了'
>>> names
['Severen', 'Peter', '该换人了', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat
', 'IamNew']
删除
>>> names
['Severen', 'Peter', '该换人了', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat
', 'IamNew']
>>> del names[2]
>>> names
['Severen', 'Peter', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.remove("Peter") #删除指定元素
>>> names
['Severen', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.pop() #删除列表最后一个值,返回被删除的值
'IamNew'
>>> names
['Severen', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat']
>>> names.pop(1) #删除列表中指定索引的值,返回被删除的值
'Bob'
>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat']
扩展
>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 1, 2, 3]
获取下标
>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 1, 2, 3]
>>> names.index('Tom')
3 #只返回找到的第一个下标
统计
>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 1, 2, 3, 'Tom']
>>> names.count('Tom')
2
排序&反转
>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 1, 2, 3, 'Tom']
>>> names.sort() #排序
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str' #3.0里不同数据类型不能放在一起排序了
>>> names[-4] = '1'
>>> names[-3] = '2'
>>> names[-2] = '3'
>>> names
['Cat', 'John', 'Severen', 'Tom', '强行从Bob后面插入', '1', '2', '3', 'Tom']
>>> names.sort()
>>> names
['1', '2', '3', 'Cat', 'John', 'Severen', 'Tom', 'Tom', '强行从Bob后面插入']
>>> names.reverse() #反转
>>> names
['强行从Bob后面插入', 'Tom', 'Tom', 'Severen', 'John', 'Cat', '3', '2', '1']
复制
#浅copy的三种实现方式:
n1 = copy.copy(names)
n2 = names[:]
n3 = list(names)
#浅copy的应用场景:一对夫妻有一个公共的银行账号(第2周第9章8分钟)
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
语法
names = ("severen","jack","tom")
它只有2个方法,一个是count,一个是index。
2、字符串操作
name = "severen"
name.capitalize() 首字母大写
name.casefold() 大写全部变小写
name.center(50,"-") 输出 '---------------------severen----------------------'
name.count('ve') 统计ve出现次数
name.encode() 将字符串编码成bytes格式
name.endswith("en") 判断字符串是否以en结尾
"seve\tren".expandtabs(10) 输出'seve ren', 将\t转换成多长的空格
name.find('A') 查找A,找到返回其索引, 找不到返回-1
format :
>>> msg = "my name is {}, and age is {}"
>>> msg.format("severen",22)
'my name is severen, and age is 22'
>>> msg = "my name is {1}, and age is {0}"
>>> msg.format("severen",22)
'my name is 22, and age is severen'
>>> msg = "my name is {name}, and age is {age}"
>>> msg.format(age=22,name="severen")
'my name is severen, and age is 22'
format_map
>>> msg.format_map({'name':'severen','age':22})
'my name is severen, and age is 22'
msg.index('a') 返回a所在字符串的索引
'9aA'.isalnum() True,包含所有的英文字母和数字
name.isalpha() True,纯英文字母组成
'9'.isdigit() 是否整数
b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则
str.islower() 是否为小写
str.isupper() 是否为大写
str.isspace() 是否为空格
'My Name Is'.istitle() 是否每个字母都大写
>>>"|".join(['seve','jack','rain'])
'seve|jack|rain'
>>> n4.ljust(40,"-")
'Hello 2orld-----------------------------'
>>> n4.rjust(40,"-")
'-----------------------------Hello 2orld'
str.lower() 大写变小写
str.upper() 小写变大写
str.strip() 去掉两边的空格和回车
str.lstrip()
str.rstrip()
>>>p = str.maketrans('abcdef', '123456')
>>>print('severen'.translate(p))
s5v5r5n
msg.swapcase() 大小写互换
str.replace(old, new, count) 从左到右替换count个,无第三个参数默认全部替换
str.rfind(v) 找到最右边的v的下标
str.split(v) 按照v分割str,返回list,默认v为空格
>>> msg.zfill(40)
'00000my name is {name}, and age is {age}'
3、字典操作
字典一种key - value 的数据类型
语法
info = {
'stu1101': "Zhangsan",
'stu1102': "Lisi",
'stu1103': "Wangwu",
}
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
增
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info['stu1104'] = 'severen'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
#update
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> b = {1:2,3:4, "stu1105":"severen"}
>>> info.update(b)
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 1: 2, 3: 4, 'stu1105': 'severen'}
删
>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info.pop("stu1101") # way1,有返回值
'bob'
>>> info
{'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> del info['stu1102'] #way2,无返回值
>>> info
{'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info.popitem() # way3,随机删除
('stu1104', 'severen')
改
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info['stu1101'] = 'bob'
>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
查
>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> 'stu1102' in info #标准用法
True
>>> info.get('stu1102') #获取
'Lisi'
>>> info['stu1102'] #同上
'Lisi'
>>> info['stu1105'] #如果一个key不存在,就报错,get不会,不存在只返回None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'stu1105'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info.values()
dict_values(['Zhangsan', 'Lisi', 'Wangwu'])
>>> info.keys()
dict_keys(['stu1101', 'stu1102', 'stu1103'])
>>> info.items()
dict_items([('stu1101', 'Zhangsan'), ('stu1102', 'Lisi'), ('stu1103', 'Wangwu')])
others
#setdefault
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info.setdefault('stu1106', 'severen') # 字典中不存在key,新增,返回value
'severen'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1106': 'severen'}
>>> info.setdefault('stu1102', 'bob') #字典中存在key,不修改原来的value,返回字典中的value
'Lisi'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1106': 'severen'}
多级字典嵌套及操作
data = {
'浙江': {
'台州': {
'玉环': ['沙门', '楚门', '凯门'],
'温岭': ['嶴环', '三门']
},
'宁波': {
'镇海': {},
'鄞州': {}
},
'杭州': {}
},
'北京': {
'朝阳': {},
'临平': {}
},
'广东': {}
}
>>> data['浙江']['台州']['玉环'][1] += 'haha'
>>> data['浙江']['台州']['玉环']
['沙门', '楚门haha', '凯门']
循环
#方法1
for key in info: #效率比方法2高
print(key,info[key])
#方法2
for k,v in info.items(): #会先把dict转成list,数据里大时莫用
print(k,v)
4、集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
基本操作
s = set([3,5,9,10]) #创建一个数值集合
t = set("Hello") #创建一个唯一字符的集合
t.add('x') # 添加一项
s.update([10,37,42]) # 在s中添加多项
使用remove()可以删除一项:
t.remove('H') # 不存在,会报错
t.discard('H') # 不存在,不会报错
t.pop() # 随机删除
set 的长度:
len(s)
x in s
测试 x 是否是 s 的成员
x not in s
测试 x 是否不是 s 的成员
s.issubset(t)
s <= t
测试是否 s 中的每一个元素都在 t 中
s.issuperset(t)
s >= t
测试是否 t 中的每一个元素都在 s 中
s.union(t)
s | t # t 和 s的并集
返回一个新的 set 包含 s 和 t 中的每一个元素
s.intersection(t)
s & t # t 和 s的交集
返回一个新的 set 包含 s 和 t 中的公共元素
s.difference(t)
s - t # 求差集(在s中,但不在t中)
返回一个新的 set 包含 s 中有但是 t 中没有的元素
s.symmetric_difference(t)
s ^ t # 对称差集(项在t或s中,但不会同时出现在二者中)
返回一个新的 set 包含 s 和 t 中不重复的元素
>>> list_1 = set([1,2,3,4,5])
>>> list_2 = set([6,7,8])
>>> list_1.isdisjoint(list_2) # 两个列表是否有交集
True
>>> list_1 = set([1,2,3,4,5,6])
>>> list_1.isdisjoint(list_2)
False