列表
序列
序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列,每一个值称为元素,每一个元素都能分配到一个数字,称为索引。可通过索引找到元素。
序列结构主要有列表、元组、集合、字典、和字符串。
序列中每一个元素都有一个编号,称为索引,索引是从左到右从0开始,也可以从右到左从-1开始。
元素1 元素2 元素3 元素4
0 1 2 3
-4 -3 -2 -1
列表的访问
#列表通过[]声明,元素与元素用逗号隔开 names = ['jack','tom','lucky','superman','ironman'] #通过索引下标取值 print(names[0]) #输出为jack print(names[-1]) #输出为ironman print(names[len(names)-1]) #输出为ironman #获取列表的长度 print(len(names)) #输出5
列表的切片
可以访问一定范围的元素,通过切片可以生成一个新的序列。
语法
sname[start:end:step] #sname:序列的名称 #start切片开始的位置,不指定默认为0 #end切片截止的位置(不包括该位置,即包前不包后),不指定默认为序列长度 #step切片的步长,默认为1
案例
#列表的切片
lists = ['hp','dell','thinkpad','lenovo','mac','神州']
print(lists[2:4]) #输出['thinkpad', 'lenovo']
print(lists[-3:-1]) #输出['lenovo', 'mac']
print(lists[::2]) #输出['hp', 'thinkpad', 'mac']
print(lists[::-1]) #输出['神州', 'mac', 'lenovo', 'thinkpad', 'dell', 'hp']
序列相加
使用+运算符,前提是相同类型的序列可以相加,如同为列表、元组、集合等,列表中的元素类型可以不同。
str1=[1,2,3] str2=['a','b','c'] print(str1+str2) #输出[1, 2, 3, 'a', 'b', 'c']
列表跟字符串,列表和元组是不可相加的,因为他们不是同一类型。
序列的乘法
使用数字乘以一个序列可生成一个新的序列。
str1=[1,2,3]*2 print(str1) #输出[1, 2, 3, 1, 2, 3]
in 跟 not in
in检查某个元素是否存在序列中。
语法格式
value in sequence
案例1
#in可用来做列表的遍历 names = ['jack','tom','lucky','superman','ironman'] for name in names: print(name) ---------------执行脚本-------------------- jack tom lucky superman ironman
案例2
#in跟not in返回的是布尔值 print('tom' in names) #输出True #查询列表中的值 for name in names: if name =='superman' print('superman在里面!') break else: print('superman不在里面!') #第二种方式 if 'superman' in names: print('superman在里面!') else: print('superman不在!')
len() max() min() 函数
#len()计算序列的长度 names = ['jack','tom','lucky','superman','ironman'] print('序列names的长度为',len(names)) #序列names的长度为 5 #max()计算序列中的最大值 names = [7,14,25,65,48,95,2,54,4] print('序列names的最大值为',max(names)) #序列names的最大值为 95 #min()计算序列中的最小值 names = [7,14,25,65,48,95,2,54,4] print('序列names的最小值为',min(names)) #序列names的最小值为 2
案例
#求最大值跟最小值 maxValue=list2[0] #先取出一个假设最大值 minValue=list2[2] #先去除一个假设最小值 for value in list2: if value >maxValue: maxValue=value if value < minValue: minValue=value print('最大值是{},最小值是{}'.format(maxValue,minValue)) #求和 sum1=0 for i in range(len(list2)): sum1+=list2[i] print('列表和为:',sum1) #求和方法二 sum2=0 for value in list2: sum2+=value print('列表和为:',sum2) #系统sum函数求和 he = sum(list2) print('列表和为:',he)
列表的其他内置函数
函数 | 说明 |
list() | 将序列转换为列表 |
str() | 将序列转换为字符串 |
sum() | 计算元素和 |
sorted() | 对元素进行排序 |
reversed() | 反向输出序列中的元素 |
enumerate() | 将序列组成一个索引序列,多用于for循环 |
更多详情查阅👉Python列表函数&方法
列表的遍历
语法1
for item in listname: #依次将列表listname中的元素取出放入item变量中 print(item)
语法2
#enumerate()函数语法格式 for index,item in enumerate(listname): print(index,item) #index:用于保存元素的索引 #item:用于保存元素的值 listname:列表名
案例
#enumerate()函数的使用 names = [7,14,25,65,48,95,2,54,4] for i in enumerate(names): print(i) ---------------执行脚本-------------------- (0, 7) (1, 14) (2, 25) (3, 65) (4, 48) (5, 95) (6, 2) (7, 54) (8, 4) #可以看到通过函数enumerate得到的i变量是将每个元素跟索引组成了元组。 #只输出列表中元素的值 names = [7,14,25,65,48,95,2,54,4] for i in enumerate(names): print(i[1]) ---------------执行脚本-------------------- 7 14 25 65 48 95 2 54 4 #按序输出 names = [7,14,25,65,48,95,2,54,4] for index,item in enumerate(names): print(index+1,item) ---------------执行脚本-------------------- 1 7 2 14 3 25 4 65 5 48 6 95 7 2 8 54 9 4
列表的修改
直接使用赋值运算符修改。
#列表的修改 brands = ['hp','dell','thinkpad','lenovo','mac','神州'] print(brands) #输出['hp', 'dell', 'thinkpad', 'lenovo', 'mac', '神州'] brands[-1]='hasee' #遍历修改列表值 for i in range(len(brands)): if '华为' in brands[i]: brands[i]='HUAWEI' print(brands)
列表的删除
语法
del listname
用法
brands = ['hp','dell','thinkpad','lenovo','mac','神州'] del brands[2]#删除thinkpad del brands #删除整个列表
元素值的删除
删除一个不确定其位置的元素,也就是根据元素值删除,可以使用列表的remove()方法。
brands = ['hp','dell','thinkpad','lenovo','mac','神州'] brands.remove("mac") print(brands) #输出为['hp', 'dell', 'thinkpad', 'lenovo', '神州']
remove函数没有返回值,如果直接打印brands.remove("mac"),会输出None
案例1
循环遍历并删除列表中的某个元素
brands = ['hp','dell','thinkpad','lenovo','mac','神州']
for i in range(len(brands)): #默认从0开始,列表长度结束 if 'mac' in brands[i] or 'hp' in brands[i]: del brands[i] #删除后下标变小,循环越界,会报错 print(brands) #这时需要使用while循环 i=len(brands) while i>=0: i=i-1 if 'hp' in brands[i] or 'dell' in brands[i]: del brands[i] print(brands)
案例2
删除列表中想要删除的单词
words = ['hello','good','apple','words','digit','alpha'] print(words) str1=input('输入你想要删除的单词:') l=len(words) while l>=0: l-=1 if str1 in words[l]: print('已删除!') del words[l] print(words)
案例3
删除列表中某个元素的升级版
python是一门简洁、阅读性极佳的语言,在生产环境中,循环嵌套最好不超过2层,实现代码越少越好。
列表对象count()函数用来判断指定元素出现的次数,返回结果为0时表示不存在该元素
brands = ['hp','dell','thinkpad','lenovo','mac','神州'] value = 'mac' if brands.count(value)>0: #判断要删除的元素是否存在 brands.remove(value) print(brands) #输出为['hp', 'dell', 'thinkpad', 'lenovo', '神州']
列表的添加
三个函数都能对列表进行添加。
append():列表末位追加
extend():将两个列表合并
insert(i,item):将一个元素插入到列表中的某个位置
#append() 列表末尾追加 girls = ['杨幂'] girls.append('杨超越') print(girls) #['杨幂', '杨超越'] #案列 girls = [] while True: name = input('请输入你喜欢的美女的名字:') if name == 'q': break girls.append(name) print(girls) #extend() 列表的合并 name = ['a','b','c'] name2=['d','e'] name.extend(name2) print(name) #输出为['a', 'b', 'c', 'd', 'e'] #等同于+,但extend()比+执行效率更快 print(name+name2) #输出为['a', 'b', 'c', 'd', 'e'] #insert() 插入 girls=['杨幂','黑嘉嘉','孙俪','巩俐','王丽坤'] girls.insert(1,'刘涛') print(girls) #输出为['杨幂', '刘涛', '黑嘉嘉', '孙俪', '巩俐', '王丽坤']
案例
#产生10个随机数放入列表中 import random list1=[] for i in range(10): #循环10次,产生10个随机数 ran = random.randint(1,20) #随机数取值范围为1-20 list1.append(ran) #升级,将10个不同的随机数放入列表中 list3=[] while len(list3)<10: ran = random.randint(1,20) if ran not in list3: list3.append(ran) print(list3) #方法2 list2=[] i=0 while i<10: ran = random.randint(1,20) if ran not in list2: list2.append(ran) i+=1 print(list2)
列表的排序
两种方式
列表对象的方法sort()
内置的函数sorted()
sort()跟sorted()的区别
sort()方法会改变原列表的排列顺序,sorted()函数会建立一个排序后的原列表的副本,不会改变原列表的排序。
sort()方法语法
listname.sort(key=None,reverse=False) #key:指定一个方法,用于每个元素执行此方法后再进行排序。 #(例如,key=str.lower 表示列表中每个元素都转换成小写再进行排序) #reverse:可选参数,如果为True,表示降序排列,为False表示升序
案例
sort()方法对字符串进行排序时,先对大写字母进行排序,然后对小写字母进行排序。
指定key参数,让其都转换为小写字母再排序(也可以理解为忽略大小写进行排序)
char=['cat','Tom','Angela','pet'] char.sort() print('先排大写,再排小写:',char) #输出为先排大写,再排小写: ['Angela', 'Tom', 'cat', 'pet'] char.sort(key=str.lower) #不缺分大小写排序 print('不区分大小写:',char) #输出为不区分大小写: ['Angela', 'cat', 'pet', 'Tom']
sorted()函数语法
sorted(iterable,key=None,reverse=False) #iterable:可迭代对象,如列表,字符串,元组等 #key:同sort()方法的key #reverse:同sort()方法的reverse
案例
list1=[10, 2, 14, 19, 16, 11, 13, 3, 9, 7]
new_list = sorted(list1)#默认为False,升序排列
print(new_list) #输出为[2, 3, 7, 9, 10, 11, 13, 14, 16, 19]
new_list = sorted(list1,reverse=True) #降序排列
print(new_list) #输出为[19, 16, 14, 13, 11, 10, 9, 7, 3, 2]
列表的嵌套
列表可以嵌套使用,列表中的元素可以是任意对象,如列表本身。
str1=[1,2,[3,4,[5,6],7],8] print(str1[2]) #输出为[3,4,[5,6] print(str1[2][0]) #输出为3 print(str1[2][2][1]) #输出为6
列表的转换
使用list()函数可以直接将range()函数循环出来的结果转换为列表。
print(range(1,10,3)) #输出为range(1, 10, 3) #list()强制转换成列表格式 print(list(range(1,10))) #输出为1,2,3,4,5,6,7,8,9(包前不包后) print(list(range(1,10,3))) #输出为[1, 4, 7] print(list(range(10,1,-3))) #输出为[10, 7, 4]
列表推导式
可以快速生成一个指定的列表
1、生成指定范围的数值列表
语法格式
list=[Expression for var in range] #list:生成列表的名称 #Expression:表达式 #var:循环变量 #range:使用range()函数
案例
项目中经常使用,需要记住!
#生成10个随机数,范围10-100 import random randomNum = [random.randint(10,100) for i in range(10)] print('生成的随机数为:',randomNum) #输出为 生成的随机数为: [49, 38, 34, 48, 40, 44, 32, 78, 69, 70]
2、根据列表生成指定需求的列表
语法格式
newlist = [Expression for var in list]
案例
定义一个商品价格列表,生成一个所有商品价格打五折后的新列表
price = [1255,1568,4848,3544,2135] sale = [int(i*0.5) for i in price] print('打折后的价格:',sale) #输出 为打折后的价格: [627, 784, 2424, 1772, 1067]
3、从列表中选择符合条件的元素生成新的列表
语法格式
newlist = [Expression for var in list if condition]
案例
生成一个商品价格高于2000的列表
price = [1255,1568,4848,3544,2135] sale = [i for i in price if i > 2000] print('价格高于2000的商品:',sale) #输出为 价格高于2000的商品: [4848, 3544, 2135]
列表中支持的符号
#+ str1=[1,2,3] str2=[4,5,6] print(str1+str2) #输出为[1, 2, 3, 4, 5, 6] #* str1=['hi','world'] print(str1*2) #输出为['hi', 'world', 'hi', 'world'] #in result = 3 in [1,2,3] #输出为True
学习来自:B站大学 P51-60
《python从入门到项目实践》明日科技 第六章
菜鸟教程