本章内容:
1.列表、元组操作
2.字符串操作
3.字典操作
4.集合操作
1.列表、元组操作:
列表就是一个数据的结合,结合内可以放任何数据类型,可对集合进行方便的增删改查操作
定义列表:
names = ['Alex',"Tenglan",'Eric']
通过下表访问列表中的元素,下标从0开始计数
>>> names[0]
'Alex'
>>> names[2]
'Eric'
>>> names[-1]
'Eric'
>>> names[-2] #还可以倒着取
'Tenglan'
切片:取多个元素
>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4] #取下标1至下标4之间的数字,包括1,不包括4
['Tenglan', 'Eric', 'Rain']
>>> names[1:-1] #取下标1至-1的值,不包括-1
['Tenglan', 'Eric', 'Rain', 'Tom']
>>> names[0:3]
['Alex', 'Tenglan', 'Eric']
>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
['Alex', 'Tenglan', 'Eric']
>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
['Rain', 'Tom', 'Amy']
>>> names[3:-1] #这样-1就不会被包含了
['Rain', 'Tom']
>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
['Alex', 'Eric', 'Tom']
>>> names[::2] #和上句效果一样
['Alex', 'Eric', 'Tom']
追加: names.append("追加的内容")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
>>> names.append("我是新来的")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
插入: names.insert(2,"在第二坐标插入")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.insert(2,"强行从Eric前面插入")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.insert(5,"从eric后面插入试试新姿势")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
复制代码
修改:names[2] = "在第二坐标修改的内容"
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> names[2] = "该换人了"
>>> names
['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
删除:
del names[2]#通过坐标来删除
names.remove("Eric") #删除指定元素
names.pop() #删除列表最后的一个值和.remove很像
>>> del names[2]
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> del names[4]
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>>
>>> names.remove("Eric") #删除指定元素
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.pop() #删除列表最后一个值
'我是新来的'
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
扩展: names.extend()
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
拷贝: 四种浅copy
1.name_copy = names.copy()
2.name_copy = copy(names)
3.name_copy = names[:]
4.name_copy = list(names) #工厂函数
深copy
1.name_copy = copy.deepcopy(names) #copy独立的个体
====== 浅copy只copy列表的第二层 ======
例子:
1.name_copy = names.copy()
import copy
names = ['Aelx','XiaoMao',['alex','aaa'],'XiaoGou','Love','Nito']
name_copy = names.copy()
print(names)
print(name_copy)
2.name_copy = copy(names)
import copy
names = ['Aelx','XiaoMao',['alex','aaa'],'XiaoGou','Love','Nito']
name_copy = copy.copy(names)
print(names)
print(name_copy)
3.name_copy = names[:]
import copy
names = ['Aelx','XiaoMao',['alex','aaa'],'XiaoGou','Love','Nito']
name_copy = names[:]
print(names)
print(name_copy)
4.name_copy = list(names) #工厂函数
import copy
names = ['Aelx','XiaoMao',['alex','aaa'],'XiaoGou','Love','Nito']
name_copy = list(names)
print(names)
print(name_copy)
拷贝例子:
import copy
names = ['Aelx','XiaoMao',['alex','aaa'],'XiaoGou','Love','Nito']
name_copy = copy.deepcopy(names) #深copy
print(names)
print(name_copy)
len(列表名) #获取列表的长度
统计:
>>> names
['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
>>> names.count("Amy")
2
排序&翻转:
>>> names
['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
>>> names.sort() #排序
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str() #3.0里不同数据类型不能放在一起排序了,擦
>>> names[-3] = '1'
>>> names[-2] = '2'
>>> names[-1] = '3'
>>> names
['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3']
>>> names.sort()
>>> names
['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom']
>>> names.reverse() #反转
>>> names
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
获取下标:
>>> names
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
>>> names.index("Amy")
2 #只返回找到的第一个下标
元组 别名(只读列表)
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
语法:
names = ("alex","jack","eric")
它只有2个方法,一个是count,一个是index,切片。
2.字符串的操作:
字符串是一个有序的字符的集合,用于存储和表示基本的文件信息,一对单、双、或 三引号中间包含的内容称之为字符串
创建:
s = 'Hello,aaa! How are you?'
特性:
1.有序
2.不可变
补充:
1.字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内所有字符均取消特殊意义,在引号前面加r,如name=r'l\thf'
2.unicode字符串与r连用必需在r前面,如name=ur'l\thf'
常用操作:
#索引
s = 'hello'
>>> s[1]
'e'
>>> s[-1]
'o'
>>> s.index('e')
1
#查找
>>> s.find('e')
1
>>> s.find('i')
-1
#移除空白
s = ' hello,world! '
s.strip()
s.lstrip()
s.rstrip()
s2 = '***hello,world!***'
s2.strip('*')
#长度
>>> s = 'hello,world'
>>> len(s)
11
#替换
>>> s = 'hello world'
>>> s.replace('h','H')
'Hello world'
>>> s2 = 'hi,how are you?'
>>> s2.replace('h','H')
'Hi,How are you?'
#切片
>>> s = 'abcdefghigklmn'
>>> s[0:7]
'abcdefg'
>>> s[7:14]
'higklmn'
>>> s[:7]
'abcdefg'
>>> s[7:]
'higklmn'
>>> s[:]
'abcdefghigklmn'
>>> s[0:7:2]
'aceg'
>>> s[7:14:3]
'hkn'
>>> s[::2]
'acegikm'
>>> s[::-1]
'nmlkgihgfedcba'
字符串类型:
replace语法
replace()方法语法:方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
str.replace(old, new[, max])
参数
- old -- 将被替换的子字符串。
- new -- 新字符串,用于替换old子字符串。
- max -- 可选字符串, 替换不超过 max 次
返回值
返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。
find语法
find()方法语法:检测字符串中是否包含子字符串
str.find(str, beg=0, end=len(string))
参数
- str -- 指定检索的字符串
- beg -- 开始索引,默认为0。
- end -- 结束索引,默认为字符串的长度。
返回值
如果包含子字符串返回开始的索引值,否则返回-1。
isdigit语法
isdigit()方法语法:方法检测字符串是否只由数字组成。
str.isdigit()
replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。Find
count语法
count()方法语法:方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
str.count(sub, start= 0,end=len(string))
参数
- sub -- 搜索的子字符串
- start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
- end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
strip语法
strip()方法语法:用于移除字符串头尾指定的字符(默认为空格)。
str.strip([chars]);
参数
- chars -- 移除字符串头尾指定的字符。
center语法
center()方法语法:方法返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
str.center(width[, fillchar])
参数
- width -- 字符串的总宽度。
- fillchar -- 填充字符。
返回值
返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充。
split语法
split()方法语法:通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
str.split(str="", num=string.count(str))
参数
- str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num -- 分割次数。
返回值
返回分割后的字符串列表。
join语法
join()方法语法:用于将序列中的元素以指定的字符连接生成一个新的字符串。
str.join(sequence)
参数
- sequence -- 要连接的元素序列。
返回值
返回通过指定字符连接序列中元素后生成的新字符串。
实例
以下实例展示了join()的使用方法:
#!/usr/bin/python3
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
以上实例输出结果如下:
r-u-n-o-o-b
runoob
chr语法
以下是 chr() 方法的语法: ASCLL字符集对应数字编码
chr(i)
参数
- i -- 可以是10进制也可以是16进制的形式的数字。
返回值
返回值是当前整数对应的ascii字符。
3.字典操作:
字典一种key-value的数据类型,使用就像我们上学用的字典,通过笔画、字母来查对应页的详细内容。
特性:
1.key-value结构
2.key必须可bash、且必须为不可变数据类型、必须唯一
3.存放多个多个值、可修改、可以不唯一
4.无序
5.查找速度快
语法:
info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Loula",
'stu1103': "Xiaoze Maliya",
}
print(info)
=== 增加&修改:
info["stu1101"] = "武藤兰" #更改key
info["stu1104"] = "CangJingKong" #如果存在将修改,不存在将添加
=== 删除:
del info["stu1101"]
info.pop("stu1102")
info.popitem() #随机删除
=== 查找:
print(info["stu1101"]) #查找 没有删除内容会报错
print(info.get('stu1103'))
print('stu1103' in info) #判断这个值是否存在 存在为True,
=== 多级字典嵌套及操作:
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
=== 更改:
av_catalog["大陆"]["1024"][1] += ",可以做镜像" #更改一个值
print(av_catalog["大陆"]["1024"])
av_catalog.setdefault("taiwan",{"www.baidu.com":[1,2]}) #创建一个新的值 ,如果这个值存在将不创建
print(av_catalog)
values: 把所有的值打出来
print(av_catalog.values())
keys: 打印key
print(av_catalog.keys())
=== update更新:
info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Loula",
'stu1103': "Xiaoze Maliya",
}
b ={
'stu1101': "Alex",
1:3,
2:5
}
info.update(b) #更新 如果合并的内容有相同的key,将会覆盖原来的key
print(info)
=== key转列表
print(info.items()) #key转列表
=== 初始化新的字典
c = dict.fromkeys([6,7,8]) #初始化新的字典,key已经写好了。
print(c)
c = dict.fromkeys([6,7,8],[1,{"name":"alex"},444]) #创建一个列表跟着改
print(c)
c[7][1]['name'] = "Jack Chen" #改一个值,都会跟着改
print(c)
=== for循环字典
for key in info:
print(key) #打印key
print(key,info[key]) #打印key和values 建议用这种方式
for k,v in info.items(): #打印key和values
print(k,v)
字典是无须的,没有序号。 用key来查询 key必须是唯一的,天生去重。
4.集合操作
集合是一个无序的,不能重复数据组合,它的主要功能如下:
1.去重, 把一个列表变成集合,就自动去重
2.关系测试,测试两组数据之前的交集、差级、并集等关系
常用功能:
list_1 = [ 1,3,4,6,9,66 ]
list_1 = set(list_1)
list_2 = set([0,2,4,5,6,22])
print(list_1,list_2)
#交集 两个集合相同的提出来
print(list_1.intersection(list_2))
print(list_1 & list_2)
#并集 两个集合合并,去重
print(list_1.union(list_2))
print(list_1 | list_2)
#差集
print(list_1.difference(list_2))
print(list_2.difference(list_1))
print(list_1 - list_2) #(项在list_1,中不在list_2中)
#子集
list_3 = set([1,3,7])
print(list_3.issubset(list_1)) #判断集合是不是包含了其它集合,等于a>=b
print(list_1.issuperset(list_3)) #判断集合是不是被其他集合包含,等于a<=b
#对称差集 把不交集的取出来 和交集相反
print(list_1.symmetric_difference(list_2))
print(list_1 ^ list_2)
print("--------")
#没交集显示真(True),有交集显示假(False)
list_4 = set([2,4,8])
print(list_3.isdisjoint(list_4)) #判断两个集合石不是不想交
#添加集合
list_1.add(999) #只能添加一个值
list_1.update([888,777,666]) #可以添加多个值
print(list_1)
#使用remove删除一项
list_1.remove('999')
print(list_1.pop()) #随机删除 返回删除的值
list_1.discard() #remove 删除不存在会报错,discard不会
#测试 list_1 是否是list_2的成员
list_1 in list_2
#测试 list_1 是否不是list_2的成员
list_1 in not list_2
浙公网安备 33010602011771号