学习内容
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] = "明修栈道"
liebiao7[-1] = "暗渡陈仓"
print ("liebiao7 改:",liebiao7)
输出结果:
原 liebiao7: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫']
liebiao7 改: ['明修栈道', '围魏救赵', '借刀杀人', '以逸待劳', '暗渡陈仓']
-
删除元素 3.1 根据索引删除,实例如下: liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫"]
print ("原 liebiao7:",liebiao7)
del liebiao7[0]
print ("liebiao7 改:",liebiao7)
del liebiao7[-1]
print ("liebiao7 改:",liebiao7)
输出结果:
原 liebiao7: ['瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫']
liebiao7 改: ['围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫']
liebiao7 改: ['围魏救赵', '借刀杀人', '以逸待劳']
3.2 根据元素值删除 根据元素值删除使用 remove() 方法实现,但如果要删除的元素不在列表内就会直接报错,此时就需要使用count() 方法进行判断,实例如下: liebiao7 = ["瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫"]
print ("原 liebiao7:",liebiao7)
liebiao7.remove("瞒天过海")
print ("liebiao7 改:",liebiao7)
if liebiao7.count("明修栈道") > 0:
liebiao7.remove("明修栈道")
liebiao7.remove("暗渡陈仓")
输出结果:
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) 参数:
count() 方法用于统计字符串里某个字符或子字符串出现的次数。可选参数为在字符串搜索的开始与结束位置。 语法: str.count(sub, start= 0,end=len(string)) 参数:
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))
print ("元素总和 =",he)
he5 = sum((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
liebiao1 = []
for i in range(5):
liebiao1.append(random.randint(10,100))
print ("随机数列:",liebiao1)
列表推导式:
import 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)]
print("最终得到的列表:",liebiao3)
输出结果:
最终得到的列表: [21]
-
列表推导式实例完整代码, 1、创建 liebiao1 ,由 5 个 10 ~ 100 以内的随机数组成。 2、取 liebiao1 中 5 个随机数的 1/2 生成新列表 liebiao2 3、选择 liebiao2 中可以整除 3 的数 生成 liebiao3 import 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。
|