python的数据结构类型:
-
字符型
-
字典
-
列表
-
元组
一、序列
序列:
-
是python中的一类数据类型,比如字符串、列表 都是一类数据类型
-
序列类型的对象是可以进行循环便利
1.1 序列特性
-
索引:指的就是在序列中找指定的元素的哪个编号
-
切片:指的是从序列中提取一部分内容
-
加法:序列对象可以将多个序列合并成一个
-
乘法:可以将序列通过乘法输出多个相同的
1.2 序列操作
1)索引操作
格式:
序列名[索引值]
案例1:
str1 = "hello" # 定义一个序列 print(str1[0]) # 通过索引值 0 取出这个序列中的第一个元素
案例2:
str = input("请输入内容: ")[2] #将用户输入进去的内容索引编号为2的元素索引出来 print(str)
2)切片操作
格式:
序列名[索引值1:索引值2] 也就是范围
案例:
str = "abcde boys, i am zxhk" res1 = str[3:] #切片 res2 = str[3:9] print(res1) # 输出结果是 de boys, i am zxhk print(res2) # 输出结果是 de boy
3)加法操作
str1 = "hello " str2 = "boys" str = str1 + str2 print(str)
案例:让用户随意输入内容,实现用户输入的内容始终在框内,而且居中
+----------------------------------+
| asdfasdfasdfasdf asdf asd |+----------------------------------+
答案如下:
name = input("请输入一些内容: ") ege = len(name) kongge = 3 s = kongge*2 shuzi = ege + s print("+",end="") print("-"*shuzi,end="") print("+") print("|",end=" ") print("%s"%(name),end=" ") print("|") print("+",end="") print("-"*shuzi,end="") print("+",end="")
4)成员资格
-
判断元素是否在序列当中
-
in\not in
-
返回的是布尔值:真 假
案例:判断用户输入的内容中是否有c,
-
如果有,就提示有c,并终止程序
-
如果没有,就提示无c,并要求用户重新输入,而且最多输入3次
方法一:
n = 1 while n < 4: name = input("请您输入一些内容: ") if "c" in name: print("您的内容中有c") break else: print("您输入的内容中没有c") n += 1
方法二:
n = 1 while True: if n > 3: print("您输入太多次数了") break name = input("请您输入一些内容: ") if "c" in name: print("您的内容中有c") break else: print("您输入的内容中没有c") n += 1
方法三:
import sys n = 1 while n < 4: name = input("请您输入一些内容:") for num in name: if num == "c": print("您输入的内容中有c") sys.exit(3) n += 1 else: print("您输入的内容中没有c")
二、列表
-
列表也是序列的一种
-
列表支持序列的所有的基础操作:加法、乘法、成员关系、切片、索引
2.1 列表基础
定义列表
列表名 = [元素1, 元素2, 元素3 ...] 注意:元素如果是字符串类型,必须家引号,如果是数字,可以加也可以不加
案例:
list1 = ["tom",18,136333333,"河北"] # 定义一个有四个元素的列表 age = list1[1] # 将列表的第二个元素赋值给age print(age)
注意:列表的元素可以是多种类型
-
数字
-
字符型
-
列表
案例:
list1 = ["tom",18,["jerr", "jack", "bob"],"河北"] age = list1[1] #将list1中第2个元素索引出来 child_3_name = list1[2][2] #将list1中的第3个元素中的 print(age) 第三个元素索引出来 print(child_3_name)
列表是可变类型
所以可以原地修改列表中的元素的值
list1 = ["tom",18,"136666666","河北"] print(list1) list1[1] = 21 # 将列表的索引是1的那个元素的值修改为21 print(list1)
数据类型互相转换
-
int() 将字符串类型修改为整型
-
float() 将对象转换为浮点数
-
list() 将对象转换成列表
-
join() 将列表中的元素转换【拼接】成一个字符串
将字符串转换为列表
s1 = "i love linux" li = list(s1) #将li的数据类型转换为列表 print(type(li)) #查询li的数据类型 print(li)
join的格式
"分隔符".join(列表)
案例:让用户输入1-9的数字,输出结果是1+2+3+4+5+6+7+8+9【注意不是求和】
方法一
n = 1 sum = "" while n < 10: num = input("请输入一个数字:") n +=1 sum = num + sum sum = list(sum) ege = "+".join(sum) print(ege)
方法二
ege = "" for num in range(1,10): name = input("请输入一个数字: ") ege += name ege = list(ege) shuzi = "+".join(ege) print(shuzi)
2.2 列表操作
索引
例子:用将第二个元素输出出来
li = ["a","bb","ccc"] print(li[1]) #将索引值为1的元素输出出来
赋值
例子:用abc将li 中的第三个元素覆盖hebei
li = ["tom",18,13666666,"hebei"] li[3] = "abc" #将li中算索引值为三的元素覆盖 print(li)
删除元素
-
删除单个元素
-
删除多个元素
li = ["tom",18,13666666,"hebei"] del li[2] # 删除列表的第二个元素 print(li)
li1 = ["a","b","c","d","e","f","h","i","j","k","m"] li1[3:7] = "" #将索引值为3至索引值为6的元素进行切片 print(li1)
切片
-
格式:
列表[start: stop: step]列表首:列表尾:步长
-
正向切片:步长是正数,从左向右截取数据
-
反向切片:步长是负数,从右向左截取数据
li = ["a","b","c","d","e","f","h","i","j","k","m"] print(li[0:]) print(li[0::1]) print(li[0:10]) # 输出列表中的前10个元素 print(li[0:10:3]) # 输出列表中的前10个元素,步长是3 print(li[-1::-1])
替换操作
-
替换一个元素,方法同前面讲到的赋值操作
-
替换多个元素,
2.3 列表的方法
格式:列表名.方法( 内容 )
列表中添加元素
-
+
-
extend:在列表的末尾添加内容
-
append:在列表的末尾添加内容
-
insert:在列表的指定的位置添加内容
案例:让用户输入内容,将用户的输入组合成一个列表,直到用户输入q终止输入,并退出
li =[] #定义一个空列表 while True: name =input("请输入一些内容: ") if name =="q": break else: li.append(name) #将name中的内容赋值给空列表中 print(li)
案例:生成一个1-100的列表
#方法1:用extend结合range
li1 = [] li1.extend(range(1,101)) print(li1)
# 方法2:循环生成100个数字 - for 版
li = [] for n in range(1, 101): li.append(n)
# 方法3:循环生成100个数字 - while 版
li = [] n = 1 while n <= 100: li.append(n) n += 1
#方法4:手动输入100个数字
li = [] for n in range(1,101): number = int(input("请输入一个数字: ")) li.append(number)
定义空类型的对象
-
空字符串: str = ""
-
空列表:str = []
方法2:获取列表的元素个数
格式:
-
len(列表名)
案例:让 用户输入一些内容,判断qq一共出现了几次?
方法一:
li=[] n=1 while n <=4: userInput=input("请输入一下内容:") if userInput=="n": break li.append(userInput) n += 1 num=li.count("qq") print(num)
方法二:
list1 = [] while True: userinput =input("请输入一些字符,如若退出请输入n").strip().lower() if userinput == "n": break else: list1.append(userinput) print(list1) print(list1.count("qq"))
方法4:找目标元素的索引
格式:
-
列表名.index(元素)
-
如果找到了目标元素,那么会得到他的索引值
-
如果没有目标元素,那么会抛出异常【报错】
-
案例:将列表 li = ["ab","c","d1","c","bb","p"] 中的 d1 修改为d10【两种方式实现】
li = ["ab","c","d1","c","bb","p"] li[2]="d10" print(li)
li = ["ab","c","d1","c","bb","p"] li[-4]="d10" print(li)
方法5:删除列表元素
-
del
-
del 列表名[索引]
-
-
remove
-
列表名.remove(元素)
-
-
pop:每次执行pop方法,可以从列表中取出最后一个元素
-
列表名.pop()
-
remove是删除首个符合条件的元素
del是根据索引位置来进行删除,也可以删除指定范围的值
pop是返回的是你弹出的那个值
案例:删除li中的第三个元素
li = ["ab","c","d1","c","bb","p"] del li[3] #删除索引号为3的元素 print(li)
案例:删除li中的c
li = ["ab","c","d1","c","bb","p"] li.remove("c") #删除列表中元素第一个为c的 print(li)
案例:逐一打印输出列表中的元素【至少两种方法实现】
# 方法1 li = ["a", "b", "c", "d"] li.reverse() #将字符串纪进行反转 num = len(li) #获取字符串长度 while num > 0: #假如字符串长度小于0 循环结束 str = li.pop() #通过pop的方法将字符串赋值给str print(str) num -= 1 # 方法2 li = ["a", "b", "c", "d"] for char in li: print(char)
删除
-
del li[0]:删除列表的第一个元素
-
del li:删除列表对象
-
del li[:] 删除列表中的所有元素,列表变成空列表
方法6:列表元素顺序翻转
格式:
-
列表.reverse()
方法7:字符串翻转
格式:
-
reversed(字符串)
-
注意:
-
转换后的结果是一个python对象,必须借助于list方法转换成列表,此时才可以进行显示
-
案例:将li中的内容逆序显示
li = ["a","b","c","d"] print(li) li.reverse() print(li)
案例:将字符串abc123转换为321cba
str = "abc123" # 定义字符串变量 print(str) # 输出结果 str = reversed(str) # 将字符串逆序 li = list(str) # 将逆序后的字符串对象转换为列表 str = "".join(li) # 通过join方法,将列表中的元素拼接成字符串 print(str)
方法8:列表元素排序
格式:
-
列表名.sort()
-
sort中的参数
-
reverse=True 实现逆序排序
-
-
案例:li1 = [3,2,1,7,6,4,5] 实现正序和逆序排序
li1 = [3,2,1,7,6,4,5] li1.sort() print(li1) li1.sort(reverse=True) print(li1)
注意:复制列表对象的方法
-
新列表=旧列表[:]
案例:将li1的值复制给li2,然后修改li2的最后一个值
li1 = [1,2,3] li2 = li1[:] print(id(li1),id(li2)) li2[2] = 4 print(li1) print(li2)
案例:实现按照列表元素长度排序
li1 = ["aaa","aaaa","aa","a"] li1.sort(key=len) #将li1中的元素按长度进行正序排序 print(li1) li1.sort(key=len, reverse=True) #将li1中的元素按长度进行逆序排序 print(li1)
方法9:列表推导式
格式:
[表达式 for var in range()]
案例:用列表推导式的方法输出1-10
li =[var for var in range(1,11)] print(li)
案例:用列表推导式的方法输出1-10的平方
li=[(x**2) for x in range(1,11)] print(li)
案例:用列表推导式的方法输出1-10之间的偶数
list = [var+1 for var in range(10)if var%2==1] print(list)# var 每次循环加一range取值为10每次判断var不是奇数则加入列表list中
补充:
-
max(列表名) #求出列表中最大的数
-
min(列表名) #求出列表中最小的数