注意:
1、非数值型的数据类型(即:列表、元组、字符串、集合、字典)所具有的公共方法:len( )、max( )、min( )、成员运算符in、 not in。
2、列表的常用方法(11个):append、extend、insert、pop、remove、clear、index、copy、count、sort、reverse。
3、删除列表中的元素,有三种方法:remove(值)、pop( )默认删末尾或pop(索引)、del(列表名[索引]),功能跟pop第二种写法一样,但不常用。
4、列表可以进行的操作:增删改查、统计、排序、复制、公共方法。
5、Python中非数值型的特点:
(1)都是可迭代对象,都可以用for来进行遍历,都能使用公共方法。除此之外,支持索引下标的列表、元组、字符串,这三个都是序列。
(2)列表、元组、字符串,这仨可以通过变量名[ 索引 ] 的方式获取某一成员的值。集合、字典,这俩不支持索引取值。
6、python中的列表,在其它语言中叫数组array,专门用来存储一些信息。
1、列表用一对中括号[ ]来定义。列表中的数据之间(也叫元素之间、成员之间)用英文的逗号进行分隔。
2、索引从0开始。所谓索引,也叫下标,就是指元素在列表中的位置编号。
3、列表可以使用 列表名[索引值] 的方式,访问指定下标的成员、获取指定元素的值。
例如:定义一个空列表。
list1 = [] # 定义一个空列表变量,名字叫list1
print(list1)
结果:
[]
对于空列表访问成员,结果就会报错
list1 = []
print(list1[0])
结果:
IndexError: list index out of range
例如:访问指定成员。
list1 = ["苹果", "香蕉", "橘子"]
print(list1[0]) # 访问第一个元素,获取第一个元素的值
结果:
苹果
list1 = ["苹果", "香蕉", "橘子"]
print(list1[3]) # 访问第四个成员
结果:
print(list1[3])
IndexError: list index out of range
4、查看列表所有方法——dir(list)
print(dir(list))
结果:
['__add__', '__class__', '__contains__',
'__delattr__', '__delitem__', '__dir__',
'__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__gt__',
'__hash__', '__iadd__', '__imul__', '__init__',
'__init_subclass__', '__iter__', '__le__', '__len__',
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
'__setattr__', '__setitem__', '__sizeof__', '__str__',
'__subclasshook__',
'append', 'clear', 'copy', 'count',
'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']
或者写成下面这样也可以,结果都一样,上面只是用列表的关键字代替了所有列表而已。
list1 = ["苹果", "香蕉", "橘子"]
print(dir(list1))
(1)insert( )——在指定位置上插入数据。
格式:列表名.insert(索引,要插入的值)
例如:
list1 = ["苹果", "香蕉", "橘子"]
list1.insert(0, "柚子") # 在下标0的位置上插入柚子
print(list1)
结果:
['柚子', '苹果', '香蕉', '橘子']
例如: 当要插入的下标,大于原列表最大下标时,默认插到最后。
list1 = ["苹果", "香蕉", "橘子"]
list1.insert(7, 123) # 在下标7的位置上插入123
print(list1) # 原列表中下标只到2 此时却要插到7的位置
结果:
['苹果', '香蕉', '橘子', 123]
(2)append——在末尾追加数据。
格式:append(数据)
例如 :
list1 = ["苹果", "香蕉", "橘子"]
list1.append("西瓜")
print(list1)
结果:
['苹果', '香蕉', '橘子', '西瓜']
例如:定义一个空列表变量,向列表内添加2,5,6这三个数字。
list1 = []
list1.append(2)
list1.append(5)
list1.append(6)
print(list1)
、
结果:
[2, 5, 6]
(3)extend——追加另一个列表的值。
格式:extend(列表)
list1 = ["苹果", "香蕉", "橘子"]
list2 = ["梨", 123]
list1.extend(list2) # 把list2的所有成员,追加到list1的后面
print(list1)
结果:
['苹果', '香蕉', '橘子', '梨', 123]
(1)remove(要删除的值)——当要删除的值,在列表中有多个时,默认删除的是第一个。
list1 = ["苹果", "香蕉", "橘子", "苹果", "橘子", "梨"]
list1.remove("橘子") # 删除第一次出现的指定数据
print(list1)
结果:
['苹果', '香蕉', '苹果', '橘子', '梨']
(2)pop( )——默认删除列表中的最后一个元素
list1 = ["苹果", "香蕉", "橘子"]
list1.pop()
print(list1)
结果:
['苹果', '香蕉']
pop的第二种写法:
pop(索引)——pop也可以删除指定索引的成员。
list1 = ["苹果", "香蕉", "橘子"]
list1.pop(0) # 删除索引为0的元素
print(list1)
结果:
['香蕉', '橘子']
(3)del(列表名[索引])——功能跟pop(指定索引)一样,但不常用。
list1 = ["苹果", "香蕉", "橘子"]
del (list1[0]) # 删除第一个元素
print(list1)
结果:
['香蕉', '橘子']
清空列表——clear——保留列表格式,清空里面元素。
list1 = ["苹果", "香蕉", "橘子"]
list1.clear()
print(list1)
结果:
[]
格式:列表名[索引]=值
list1 = ["苹果", "香蕉", "橘子"]
list1[0] = 123 # 把下标0位置上的元素修改成123、把“苹果”修改为123
print(list1)
结果:
[123, '香蕉', '橘子']
list1 = ["苹果", "香蕉", "橘子"]
list1[6] = 123 # 不能修改下标不存在的成员
print(list1)
结果:
list1[6] = 123
IndexError: list assignment index out of range
注意一个问题,insert中插入的位置大于原列表下标最大值时,运行依然成功,而利用[ ]修改值的时候,如果要修改的索引不存在就会报错。
格式:count(元素) 如果这个元素在这个列表中,有多个值和它一样,那就返回一样值的总个数,如果没有跟它一样的值,就返回0 。
list1 = ["苹果", "香蕉", "橘子", "苹果"]
print(list1.count("苹果")) # 统计列表中有多少个苹果
print(list1.count("哈密瓜")) # 统计列表中有多少个哈密瓜
结果:
2 # 列表中有两个苹果元素
0 # 说明列表中没有这个元素
格式:index(元素,开始查找的起始位置)
起始位置,默认为0可以不写,要查找的元素,在列表中一定得是存在的,如果不存在就会报错。即:如果找到就返回该元素在列表中的位置下标(如果有多个相同元素,那就返回第一个元素的下标),如果没找到就报错。
注意:列表中的查找就只有index,而字符串里面的查找有index和find。
list1 = ["苹果", "香蕉", "橘子", "苹果", "橘子", "梨"]
print(list1.index("梨"))
结果:
5
list1 = ["苹果", "香蕉", "橘子", "苹果", "橘子", "梨"]
print(list1.index("哈密瓜"))
结果:
print(list1.index("哈密瓜"))
ValueError: '哈密瓜' is not in list
例如:
list1 = ["苹果", "香蕉", "橘子", "苹果", "橘子", "梨"]
print(list1.index("橘子")) #不写起始位置,默认从0开始查找
结果:
2
list1 = ["苹果", "香蕉", "橘子", "苹果", "橘子", "梨"]
print(list1.index("橘子", 3)) # 从下标3开始查找
结果:
4
sort( ) ——对列表成员从小到大排序,即:升序
sort(reverse=True) ——降序
reverse() ——逆序、倒序、逆置
list1 = [5, 2, 4, 6, 0, 8, 1]
list1.sort()
print(list1)
结果:
[0, 1, 2, 4, 5, 6, 8]
list1 = [5, 2, 4, 6, 0, 8, 1]
list1.sort(reverse=True) # 降序
print(list1)
结果:
[8, 6, 5, 4, 2, 1, 0]
例如:逆置、逆序。
list1 = [5, 2, 4, 6, 0, 8, 1]
list1.reverse() # 逆序、倒序、逆置
print(list1)
结果:
[1, 8, 0, 6, 4, 2, 5]
所谓遍历就是说,从头到尾依次的获取列表中的数据(也叫元素、成员、值)。
常用for来进行遍历。在Python中,可以使用for来循环遍历所有非数值型的变量,比如:列表、元组、字符串、字典、集合。
格式:
for 变量名 in 列表名:
代码
其中,列表中有多少个成员,for就会循环多少次。变量名代表for 每次循环的时候,得到的列表成员的值。
list1 = ["甲", "乙", "丙"]
for i in list1: # for 循环会循环三次,因为list1里有三个成员
print(i)
# for第1次循环的时候,i的值是“甲”
结果: # for第2次循环的时候,i的值是“乙”
甲 # for第3次循环的时候,i的值是“丙”
乙
丙
例如:定义一个列表变量,内容如下:[3,3,6,2,0],使用for循环遍历计算列表中一共有多少数字。
# 法1
list1 = [3, 3, 6, 2, 0]
print(len(list1))
结果:
5
# 法2
list1 = [3, 3, 6, 2, 0]
sum = 0
for n in list1:
sum += 1
print(sum)
结果:
5
例如:计算列表中所有数字相加的总和,以及平均值。
list1 = [3, 1, 6, 2]
sum = 0
for n in list1:
sum += n # 给列表成员求和
print(sum)
print(sum/len(list1)) # 给列表成员求均值
结果:
12
3.0
在用for循环遍历列表时,如果后面循环的代码中,要对成员进行处理,那么要注意看,列表中的成员数据类型是否统一,如果不统一,那就要注意类型的转化,需要把它们转化为统一的数据类型。
例如:输出友情提示“列表第几个成员是:”,发现列表中,既有字符串类型,也有数值型。
list1 = [7, "张三", 1, 3.14, "李四", "王二麻子"]
n = 1
for i in list1:
print("列表第%d个成员是:%s" % (n, str(i)))
n += 1
结果:
列表第1个成员是:7
列表第2个成员是:张三
列表第3个成员是:1
列表第4个成员是:3.14
列表第5个成员是:李四
列表第6个成员是:王二麻子
解析:因为print语句中是%s,意思是要输出字符串类型,而列表中存在整型浮点型,所以要用str()全转为字符串类型。
例如:对列表中成员进行求和。此时,列表中存在字符串类型。
list1 = [1, "56", 3]
sum = 0
for n in list1:
sum += int(n) # 要把列表中的元素全部转为整型再计算
print(sum)
结果:
60
解析:因为是要求和,而列表中存在字符串类型,没办成参与求和,所以就要用int()把它强制转化为整型,这样就能统一列表中成员的数据类型了。
例如:统计字符串长度。
#法1
str1 = "甲乙丙"
print(len(str1))
结果:
3
#法2
n = "甲乙丙"
sum = 0
for a in n:
sum += 1
print(sum)
结果:
3
例如:统计列表中水果名称为两个字的有几个。
# 法1
list1 = ["圣女果", "苹果", "橘子", "香蕉", "哈密瓜", "梨"]
sum = 0
for i in list1: # 对成员进行遍历
if len(i) == 2: # 判断成员字符个数是否为2
sum += 1
print(sum)
结果:
3
# 法2————不推荐
list1 = ["圣女果", "苹果", "橘子", "香蕉", "哈密瓜", "梨"]
sum = 0 # 存放名字为2个字的出现次数
for i in list1: # i 是列表中的每个成员,list1中有多少个成员就循环几次
b = 0
for a in i: # a是字符串i中的每个字符,i中有几个字符for就循环几次
b += 1 # b 统计字符串i的长度
if b == 2:
sum += 1
print(sum)
结果:
3
就是把一个列表中的每个值都拆出来。
格式:
变量1,变量2,...变量n = 列表名
注意:等号左边的变量个数,要等于等号右边的列表成员个数。
list1 = [1, "甲", 123]
a, b, c = list1
print(a, b, c)
结果:
1 甲 123
# 拆包后,成员是什么类型,拆包后就是什么类型
list1 = [1, "甲", 123]
a, b, c = list1
print(a, b, c)
print(type(a))
print(type(b))
结果:
1 甲 123
# 对字符串拆包
str1 = "hell"
a, b, c, d = str1
print(a, b, c, d)
结果:
h e l l
一种快速创建数字列表的方法。就是用for跟range范围函数结合的方式,生成列表。
格式:
写法1:列表变量名=[x for x in range(开始值,结束值,步长)]
写法2:列表变量名=[x for x in range(开始值,结束值,步长) if 条件 ]
例如:快速创建一个列表,内容为:[0,2,4,6,8,10] 。
# 法1
list1 = [x for x in range(0, 11, 2)] # 用步长
print(list1)
结果:
[0, 2, 4, 6, 8, 10]
# 法2
list1 = [x for x in range(0, 11) if x % 2 == 0] # 用 if 条件
print(list1)
结果:
[0, 2, 4, 6, 8, 10]
所谓非数值型变量就是常说的那5个:列表、元组、集合、字典、字符串。
下面以列表为例进行说明。
list1 = [1, 3, 5] # 统计列表,就是返回列表成员个数
print(len(list1))
str1 = "1234abc" # 统计字符串,就是返回字符串中字符的个数
print(len(str1))、
结果:
3
7
list1 = [1, 3, 5]
print(max(list1))
结果:
5
str1 = "1234abc"
print(max(str1)) # 返回字符串中ASSCII码值最大的那个字符
结果:
c
格式:
值 in 列表——判断值是否在列表内
值 not in 列表——判断值是否不在列表内
list1 = [3, 5, "张三", 3.14]
print(3 in list1) # 3在里面
结果:
True # 说明3在
list1 = [3, 5, "张三", 3.14]
print(1 in list1) # 1在里面
结果:
False # 说明1不在
# 法2:——不推荐
list1 = [3, 5, "张三", 3.14]
if 3 in list1:
print("3在")
结果:
3在
list1 = [3, 5, "张三", 3.14]
print(1 in list1) # 1在里面
print(1 not in list1) # 1不在里面
结果:
False
True
法2——不推荐
list1 = [3, 5, "张三", 3.14]
if 2 not in list1:
print("2不在")
结果:
2不在
例如:判断列表中是否有“苹果”,如果有,把它删掉。
list1 = ["苹果", "橘子", 1]
if "苹果" in list1:
list1.remove("苹果")
print(list1)
结果:
['橘子', 1]