笔记.2021.08.04"/>
閑人壹のPython笔记.2021.08.04
閑人壹のPython笔记.2021.08.04
- 学习内容
- 1.列表(list)
- 2.访问列表元素
- 3.遍历列表
- 4.使用 for 循环和 enumerate() 函数实现
- 5.对列表元素的 添加、修改、删除
- 6.列表的统计计算
- 7.列表推导式
学习内容
1.列表(list)
列表是由一系列按特定顺序排序的元素组成的 Python 内置的可变序列,列表所有元素都放在一对中括号 ”[]“ 中,每个元素都由逗号 “ , ” 分隔。可以将整数、实数、字符串、列表、元组等任何类型的内容放在同一列表中,元素之间没有任何关系。
-
列表的创建与删除
1.1 使用赋值运算符创建列表
语法: 列表名 = [元素1,元素2,……,元素n]实例: liebiao1 = [12,3,8,7,5,10,1] liebiao2 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳"] liebiao3 = [12,3,8,7,"围魏救赵","借刀杀人",5,10,1] liebiao4 = [12,3,8,7,liebiao2,5,10,1] print ("liebiao1 输出结果:",liebiao1) print ("liebiao2 输出结果:",liebiao2) print ("liebiao3 输出结果:",liebiao3) print ("liebiao4 输出结果:",liebiao4)输出结果: liebiao1 输出结果: [12, 3, 8, 7, 5, 10, 1] liebiao2 输出结果: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳'] liebiao3 输出结果: [12, 3, 8, 7, '围魏救赵', '借刀杀人', 5, 10, 1] liebiao4 输出结果: [12, 3, 8, 7, ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳'], 5, 10, 1]
★ 在实际作业中一个列表内尽量只放入一种类型的数据,以提高程序的可读性。
-
创建空列表
列表名 = []
-
创建数值列表
实例: 创建一个10以内奇数的列表 liebiao6 = list (range(1,10,2)) print ("10以内奇数的列表:",liebiao6)输出结果: 10以内奇数的列表: [1, 3, 5, 7, 9]
相关函数说明:
list() 用于将元组、对象或字符串转换为列表
list 语法:
lies (data)
参数说明:
data – 表示可以转换为列表的数据,其类型可以是对象、字符串、元组或其他可迭代类型的数据。range() 函数可创建一个整数列表,8月1日笔记中有详细介绍。
-
删除列表
删除列表语句:del ,Python 自带回收机制,会自动销毁不用的列表,所以 del 语句在实际作业中和少用到。
语法: del 列表名实例: liebiao6 = list (range(1,10,2)) print ("10以内奇数的列表:",liebiao6) del liebiao6 print(liebiao6)输出结果: 10以内奇数的列表: [1, 3, 5, 7, 9] Traceback (most recent call last):File "****.py", line 18, in <module>print(liebiao6) NameError: name 'liebiao6' is not defined
2.访问列表元素
如何访问列表中的元素,方法与序列基本相同,如下实例:
liebiao7 = [12,3,8,7,"围魏救赵","借刀杀人",5,10] print ("liebiao7:",liebiao7) print ("liebiao7的第3个元素:",liebiao7[3]) print ("liebiao7的倒数第3个元素:",liebiao7[-3])输出结果: liebiao7: [12, 3, 8, 7, '围魏救赵', '借刀杀人', 5, 10] liebiao7的第3个元素: 7 liebiao7的倒数第3个元素: 借刀杀人
3.遍历列表
-
使用 for 循环实现
语法: for item in 列表名:print (item) item -- 用于保存获得的元素值的变量。实例: liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫","声东击西","无中生有"] print (liebiao7) for item in liebiao7:print (item)输出结果: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫', '声东击西', '无中生有'] 瞒天过海 围魏救赵 借刀杀人 以逸待劳 趁火打劫 声东击西 无中生有
4.使用 for 循环和 enumerate() 函数实现
-
enumerate()
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
语法
以下是 enumerate() 方法的语法:
enumerate(sequence, [start=0])
参数
sequence – 一个序列、迭代器或其他支持迭代对象。
start – 下标起始位置。
-
实例说明:
方法1: print ("盘点几个三十六计中的妙法:") liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫","声东击西","无中生有"] for item in enumerate(liebiao7,1):print (item)输出结果: 盘点几个三十六计中的妙法: (1, '瞒天过海') (2, '围魏救赵') (3, '借刀杀人') (4, '以逸待劳') (5, '趁火打劫') (6, '声东击西') (7, '无中生有')方法2: print ("盘点几个三十六计中的妙法:") liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫","声东击西","无中生有"] for index,item in enumerate(liebiao7):print (index + 1,item) 参数: index -- 用于保存元素的索引。输出结果: 盘点几个三十六计中的妙法: 2 瞒天过海 3 围魏救赵 4 借刀杀人 5 以逸待劳 6 趁火打劫 7 声东击西 8 无中生有题外语: index() 函数用于从列表中找出某个值第一个匹配项的索引位置。语法 list.index(x[, start[, end]])参数x-- 查找的对象。start-- 可选,查找的起始位置。end-- 可选,查找的结束位置。实例: liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫"] print ('围魏救赵 索引值为', liebiao7.index('围魏救赵')) print ('以逸待劳 索引值为', liebiao7.index('以逸待劳'))输出结果: 围魏救赵 索引值为 1 以逸待劳 索引值为 3
5.对列表元素的 添加、修改、删除
-
添加元素
1.1 append() 方法
append() 方法用于在列表末尾添加新的对象。
语法:
list.append(obj)
参数:
obj – 添加到列表末尾的对象。
实例:
liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫"] print (liebiao7) a1 = input ("请再补充一计:") liebiao7.append(a1) print (liebiao7)输出结果: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫'] 请再补充一计:暗渡陈仓 ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫', '暗渡陈仓']
1.2 extend() 方法
extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
语法:
list.extend(seq)
参数:
seq – 元素列表,可以是列表、元组、集合、字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。
实例:
liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫"] liebiao8 = ["明修栈道","暗渡陈仓"] print (liebiao7) liebiao7.extend(liebiao8) print (liebiao7)输出结果: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫'] ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫', '明修栈道', '暗渡陈仓']
-
修改元素
修改元素使用 赋值运算符 重新赋值即可,实例如下:
liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫"] print ("原 liebiao7:",liebiao7) liebiao7[0] = "明修栈道" # 修改元素0为明修栈道 liebiao7[-1] = "暗渡陈仓" # 修改倒数第1个元素,即元素4为暗渡陈仓 print ("liebiao7 改:",liebiao7)输出结果: 原 liebiao7: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫'] liebiao7 改: ['明修栈道', '围魏救赵', '借刀杀人', '以逸待劳', '暗渡陈仓']
-
删除元素
3.1 根据索引删除,实例如下:
liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫"] print ("原 liebiao7:",liebiao7) del liebiao7[0] # 删除元素0 print ("liebiao7 改:",liebiao7) del liebiao7[-1] # 删除倒数第1个元素,即元素4 print ("liebiao7 改:",liebiao7)输出结果: 原 liebiao7: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫'] liebiao7 改: ['围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫'] liebiao7 改: ['围魏救赵', '借刀杀人', '以逸待劳']
3.2 根据元素值删除
根据元素值删除使用 remove() 方法实现,但如果要删除的元素不在列表内就会直接报错,此时就需要使用count() 方法进行判断,实例如下:
liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫"] print ("原 liebiao7:",liebiao7) liebiao7.remove("瞒天过海") # 删除元素 "瞒天过海" print ("liebiao7 改:",liebiao7) if liebiao7.count("明修栈道") > 0: # 判断 liebiao7 是否包含元素"明修栈道" liebiao7.remove("明修栈道") liebiao7.remove("暗渡陈仓") # 直接删除元素 "暗渡陈仓" ,liebiao7 不包含该元素会弹出异常报告输出结果: Traceback (most recent call last):File "****.py", line 37, in <module>liebiao7.remove("暗渡陈仓") ValueError: list.remove(x): x not in list # 错误提示 原 liebiao7: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫'] liebiao7 改: ['围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫']
函数详解:
remove() 函数用于移除列表中某个值的第一个匹配项。
语法:
list.remove(obj)
参数:
- obj – 列表中要移除的对象。
count() 方法用于统计字符串里某个字符或子字符串出现的次数。可选参数为在字符串搜索的开始与结束位置。
语法:
str.count(sub, start= 0,end=len(string))
参数:
-
sub – 搜索的子字符串
-
start – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
-
end – 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
6.列表的统计计算
-
统计指定元素出现次数,使用 count() 方法实现,实例如下:
liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","瞒天过海","围魏救赵"] print ("原 liebiao7:",liebiao7) t1 = liebiao7.count("瞒天过海") print ("瞒天过海:",t1) t2 = liebiao7.count("借刀杀人") print ("借刀杀人:",t2) t3 = liebiao7.count("明修栈道") print ("明修栈道:",t3)输出结果: 原 liebiao7: ['瞒天过海', '围魏救赵', '借刀杀人', '瞒天过海', '围魏救赵'] 瞒天过海: 2 借刀杀人: 1 明修栈道: 0
-
获取指定元素的首次出现索引位置,使用 index() 方法,实例如下:
liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","瞒天过海","围魏救赵"] print ("原 liebiao7:",liebiao7) t1 = liebiao7.index("瞒天过海") print ("瞒天过海 索引位置:",t1) t2 = liebiao7.index("借刀杀人") print ("借刀杀人 索引位置:",t2) t3 = liebiao7.index("瞒天过海",1) print ("瞒天过海 索引位置:",t3)输出结果: 原 liebiao7: ['瞒天过海', '围魏救赵', '借刀杀人', '瞒天过海', '围魏救赵'] 瞒天过海 索引位置: 0 借刀杀人 索引位置: 2 瞒天过海 索引位置: 3
函数详解:
index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
语法:
str.index(str, beg=0, end=len(string))
参数:
- str – 指定检索的字符串
- beg – 开始索引,默认为0。
- end – 结束索引,默认为字符串的长度。
-
统计数值列表的元素和
使用函数 sum() ,函数详解如下:
sum() 方法对序列进行求和计算。
语法:
sum(iterable[, start])
参数:
- iterable – 可迭代对象,如:列表、元组、集合。
- start – 指定相加的参数,如果没有设置这个值,默认为0。
实例: shulie = [0,1,2,3,4,5] print (shulie) he = (sum(shulie)) # 列表shulie内所有数值之和 print ("元素总和 =",he) he5 = sum((shulie),5) # 列表shulie内所有数值之和,再加 5 print("元素总和 + 5 =",he5)输出结果: [0, 1, 2, 3, 4, 5] 元素总和 = 15 元素总和 + 5 = 20
-
对列表进行排序
4.1 sort() 方法
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法:
list.sort( key=None, reverse=False)
参数:
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序,如:“key = str.lower” 表示在排序时不区分大小写。
- reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
实例:
shulie = [1,4,2,5,6,3] print ("源列表",shulie) shulie.sort() # 默认升序排列 print ("升 序",shulie) shulie.sort(reverse = True) # 降序排列 print ("降 序",shulie) shulie = ["瞒天过海","围魏救赵","借刀杀人","瞒天过海","围魏救赵"] print ("源列表",shulie) shulie.sort() # 默认升序排列 print ("升 序",shulie) shulie.sort(reverse = True) # 降序排列 print ("降 序",shulie) shulie = ['a','D','c','F','b','E'] print ("源列表",shulie) shulie.sort() # 默认升序排列 print ("升 序",shulie) shulie.sort(reverse = True) # 降序排列 print ("降 序",shulie) shulie.sort(key = str.lower) # 不区分大小写,默认升序排列 print ("升 序",shulie) shulie.sort(key = str.lower , reverse = True) # 不区分大小写,降序排列 print ("降 序",shulie)输出结果: 源列表 [1, 4, 2, 5, 6, 3] 升 序 [1, 2, 3, 4, 5, 6] 降 序 [6, 5, 4, 3, 2, 1] 源列表 ['瞒天过海', '围魏救赵', '借刀杀人', '瞒天过海', '围魏救赵'] 升 序 ['借刀杀人', '围魏救赵', '围魏救赵', '瞒天过海', '瞒天过海'] 降 序 ['瞒天过海', '瞒天过海', '围魏救赵', '围魏救赵', '借刀杀人'] 源列表 ['a', 'D', 'c', 'F', 'b', 'E'] 升 序 ['D', 'E', 'F', 'a', 'b', 'c'] 降 序 ['c', 'b', 'a', 'F', 'E', 'D'] 升 序 ['a', 'b', 'c', 'D', 'E', 'F'] 降 序 ['F', 'E', 'D', 'c', 'b', 'a']
4.2 sorted() 函数实现
sorted() 函数对所有可迭代的对象进行排序操作。
语法:
sorted(iterable, key=None, reverse=False)
参数说明:
- iterable – 可迭代对象。
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序如:“key = str.lower” 表示在排序时不区分大小写。
- reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
实例:
shulie = [1,4,2,5,6,3] print ("源列表",shulie) shulie1 = sorted(shulie) print ("升 序",shulie1) shulie2 = sorted(shulie,reverse = True) print ("降 序",shulie2) shulie = ["瞒天过海","围魏救赵","借刀杀人","瞒天过海","围魏救赵"] print ("源列表",shulie) shulie3 = sorted(shulie) print ("升 序",shulie) shulie4 = sorted(shulie,reverse = True) print ("降 序",shulie4) shulie = ['a','D','c','F','b','E'] print ("源列表",shulie) shulie5 = sorted(shulie) print ("升 序",shulie5) shulie6 = sorted(shulie,reverse = True) print ("降 序",shulie6) shulie6 = sorted(shulie,key = str.lower) print ("升 序",shulie6) shulie7 = sorted(shulie,key = str.lower , reverse = True) print ("降 序",shulie7)输出结果: 源列表 [1, 4, 2, 5, 6, 3] 升 序 [1, 2, 3, 4, 5, 6] 降 序 [6, 5, 4, 3, 2, 1] 源列表 ['瞒天过海', '围魏救赵', '借刀杀人', '瞒天过海', '围魏救赵'] 升 序 ['瞒天过海', '围魏救赵', '借刀杀人', '瞒天过海', '围魏救赵'] 降 序 ['瞒天过海', '瞒天过海', '围魏救赵', '围魏救赵', '借刀杀人'] 源列表 ['a', 'D', 'c', 'F', 'b', 'E'] 升 序 ['D', 'E', 'F', 'a', 'b', 'c'] 降 序 ['c', 'b', 'a', 'F', 'E', 'D'] 升 序 ['a', 'b', 'c', 'D', 'E', 'F'] 降 序 ['F', 'E', 'D', 'c', 'b', 'a']
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
7.列表推导式
列表推导式 可以快速生成一个列表,或者根据某个列表生成满足指定条件的列表。
-
生成指定范围的数值列表
语法:
list = [Expression for var in range]
参数说明:
- list – 生成的列表名。
- Expression – 用于计算新列表元素的表达式。
- var – 循环变量
- range – 采用 range() 函数生成数值序列。
实例:
生成一个包含 5 个数的随机数的列表,范围在 10 ~ 100 之间
常规写法: import random # 导入生成随机数模块 random liebiao1 = [] # 创建空列表 liebiao1 for i in range(5): # 使用 range() 函数生成 5个数liebiao1.append(random.randint(10,100)) # 向 liebiao1 内添加 10~100內的随机数 print ("随机数列:",liebiao1)列表推导式: import random # 导入生成随机数模块 random liebiao1 = [random.randint(10,100) for i in range(5)] # 创建列表,并规定生成元素条件,和选择语句的条件表达式有些相似 print ("随机数列:",liebiao1)输出结果: 随机数列: [77, 42, 53, 57, 23] # 随机数列每次执行结果各不相同 随机数列: [65, 75, 100, 33, 31]
-
根据列表生成指定的列表
语法:
neslist = [Expression for var in list]
参数说明:
- neslist – 新生成的列表名。
- Expression – 用于计算新列表元素的表达式。
- var – 循环变量
- list – 源列表。
实例:
求上例中生成列表中元素的 2分之1
liebiao1 = [77, 42, 53, 57, 23] liebiao2 = [int(x*0.5) for x in liebiao1] # 将liebiao1中的元素乘以0.5填入liebiao2 print ("源列表:",liebiao1) print ("源列表的 1/2:",liebiao2)输出结果: 源列表: [77, 42, 53, 57, 23] 源列表的 1/2: [38, 21, 26, 28, 11]
-
从列表中选择符合条件的元素组成新列表
语法:
neslist = [Expression for var in list if condition]
参数说明:
- neslist – 新生成的列表名。
- Expression – 用于计算新列表元素的表达式。
- var – 循环变量
- list – 源列表。
- condition – 用于筛选新列表元素的表达式
实例:
将上例新生成的 liebiao2 中可以整除 3 的数生成一个新列表 liebiao3
liebiao2 = [38, 21, 26, 28, 11] liebiao3 = [x for x in liebiao2 if int(x % 3 == 0)] #筛选liebiao2中可以整除3的元素填入 liebiao3 print("最终得到的列表:",liebiao3)输出结果: 最终得到的列表: [21]
-
列表推导式实例完整代码,
1、创建 liebiao1 ,由 5 个 10 ~ 100 以内的随机数组成。
2、取 liebiao1 中 5 个随机数的 1/2 生成新列表 liebiao2
3、选择 liebiao2 中可以整除 3 的数 生成 liebiao3
import random # 导入生成随机数模块 random liebiao1 = [random.randint(10,100) for i in range(5)] liebiao2 = [int(x*0.5) for x in liebiao1] liebiao3 = [x for x in liebiao2 if int(x % 3 == 0)] print ("源列表:",liebiao1) print ("源列表的 1/2:",liebiao2) print("最终得到的列表:",liebiao3)输出结果: 源列表: [63, 12, 99, 25, 21] 源列表的 1/2: [31, 6, 49, 12, 10] 最终得到的列表: [6, 12]
相关函数:
random 模块的 randint() 函数来生成随机数,你每次执行后都返回不同的数字(0 到 9),该函数的语法为:
random.randint(a,b)
函数返回数字 N ,N 为 a 到 b 之间的数字(a <= N <= b),包含 a 和 b。
更多推荐
閑人壹のPython笔记.2021.08.04
发布评论