今天介绍python数据类型中的list
- int,整数类型(整形)
- bool,布尔类型
- str,字符串类型
- list,列表类型
- tuple,元组类型
- dict,字典类型
- set,集合类型
- float,浮点类型(浮点型)
1、什么是list
列表(list),是一个有序且可变的容器,在里面可以存放多个不同类型的元素
不可变类型:字符串、布尔、整型(已最小,内部数据无法进行修改)
可变类型:列表(内部数据元素可以修改)
2、创建列表
列表的数据项不需要具有相同的类型,它可以作为一个方括号内的逗号分隔值出现。
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['Google', 'Runoob', 1997, 2000] list2 = [1, 2, 3, 4, 5 ] list3 = ["a", "b", "c", "d"] list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']
3、获取长度
len(list)
list1 = ['Google', 'Runoob', 'Taobao'] print (len(list1)) list2=list(range(5)) # 创建一个 0-4 的列表 print (len(list2))
4、列表元素最大值
max函数
list1, list2 = ['Google', 'Runoob', 'Taobao'], [456, 700, 200] print ("list1 最大元素值 : ", max(list1)) print ("list2 最大元素值 : ", max(list2))
5、列表元素最小值
min()函数
list1, list2 = ['Google', 'Runoob', 'Taobao'], [456, 700, 200] print ("list1 最小元素值 : ", min(list1)) print ("list2 最小元素值 : ", min(list2))
6、将元组或字符串转化为列表
list() 方法用于将元组或字符串转换为列表。
注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
aTuple = (123, 'Google', 'Runoob', 'Taobao') list1 = list(aTuple) print ("列表元素 : ", list1) str="Hello World" list2=list(str) print ("列表元素 : ", list2)
列表元素 : [123, 'Google', 'Runoob', 'Taobao']
列表元素 : ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
7、索引操作一个元素
与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。
通过索引列表可以进行截取、组合等操作。
# 读 user_list = ["范德彪","刘华强",'尼古拉斯赵四'] print( user_list[0] ) print( user_list[2] ) print( user_list[3] ) # 报错 # 改 user_list = ["范德彪","刘华强",'尼古拉斯赵四'] user_list[0] = "武沛齐" print(user_list) # ["武沛齐","刘华强",'尼古拉斯赵四'] # 删 user_list = ["范德彪","刘华强",'尼古拉斯赵四'] del user_list[1] user_list.remove("刘华强") ele = user_list.pop(1)
8、切片:多个索引操作元素(很少用)
# 读 user_list = ["范德彪","刘华强",'尼古拉斯赵四'] print( user_list[0:2] ) # ["范德彪","刘华强"] print( user_list[1:] ) print( user_list[:-1] ) # 改 user_list = ["范德彪", "刘华强", '尼古拉斯赵四'] user_list[0:2] = [11, 22, 33, 44] print(user_list) # 输出 [11, 22, 33, 44, '尼古拉斯赵四'] user_list = ["范德彪", "刘华强", '尼古拉斯赵四'] user_list[2:] = [11, 22, 33, 44] print(user_list) # 输出 ['范德彪', '刘华强', 11, 22, 33, 44] user_list = ["范德彪", "刘华强", '尼古拉斯赵四'] user_list[3:] = [11, 22, 33, 44] print(user_list) # 输出 ['范德彪', '刘华强', '尼古拉斯赵四', 11, 22, 33, 44] user_list = ["范德彪", "刘华强", '尼古拉斯赵四'] user_list[10000:] = [11, 22, 33, 44] print(user_list) # 输出 ['范德彪', '刘华强', '尼古拉斯赵四', 11, 22, 33, 44] user_list = ["范德彪", "刘华强", '尼古拉斯赵四'] user_list[-10000:1] = [11, 22, 33, 44] print(user_list) # 输出 [11, 22, 33, 44, '刘华强', '尼古拉斯赵四'] # 删 user_list = ["范德彪", "刘华强", '尼古拉斯赵四'] del user_list[1:] print(user_list) # 输出 ['范德彪'] # 步长 user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] # 0 1 2 3 4 print( user_list[1:4:2] ) print( user_list[0::2] ) print( user_list[1::2] ) print( user_list[4:1:-1] )
9、查找某个值第一个匹配项的索引位置
index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
index()方法语法:list.index(x[, start[, end]])
- x-- 查找的对象。
- start-- 可选,查找的起始位置。
- end-- 可选,查找的结束位置。
该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。
list1 = ['Google', 'Runoob', 'Taobao'] print ('Runoob 索引值为', list1.index('Runoob')) print ('Taobao 索引值为', list1.index('Taobao'))
输出
Runoob 索引值为 1
Taobao 索引值为 2
list1 = ['Google', 'Runoob', 'Taobao', 'Facebook', 'QQ'] # 从指定位置开始搜索 print ('Runoob 索引值为', list1.index('Runoob',1))
输出
Runoob 索引值为 1
10、元素是否在列表中
运算符in包含
由于列表内部是由多个元素组成,可以通过in来判断元素是否在列表中
user_list = ["狗子","二蛋","沙雕","alex"] result = "alex" in user_list # result = "alex" not in user_list print(result) # True if "alex" in user_list: print("在,把他删除") user_list.remove("alex") else: print("不在")
11、列表循环
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"] for item in user_list: print(item) # 根据索引循环 for index in range( len(user_list) ): item = user_index[index] print(item)
循环的过程中对数据进行删除会踩坑
# 错误方式, 有坑,结果不是你想要的。 user_list = ["刘的话", "范德彪", "刘华强", '刘尼古拉斯赵四', "宋小宝", "刘能"] for item in user_list: if item.startswith("刘"): user_list.remove(item) print(user_list)
# 正确方式,倒着删除。 user_list = ["刘的话", "范德彪", "刘华强", '刘尼古拉斯赵四', "宋小宝", "刘能"] for index in range(len(user_list) - 1, -1, -1): item = user_list[index] if item.startswith("刘"): user_list.remove(item) print(user_list)
12、添加、插入元素
1、list.append(obj) 在列表末尾添加新的对象
list1 = ['Google', 'Runoob', 'Taobao'] list1.append('Baidu') print ("更新后的列表 : ", list1)
更新后的列表 : ['Google', 'Runoob', 'Taobao', 'Baidu']
队列是一种先进先出(FIFO)的数据结构,我们可以使用列表来实现队列的基本功能。
append()
方法向队列的末尾添加一个元素。pop()
方法从队列的开头删除一个元素并返回它。
queue = [] # 添加元素到队列的末尾 queue.append('A') queue.append('B') queue.append('C') # 从队列的开头删除元素并返回 print(queue.pop(0)) # A print(queue.pop(0)) # B print(queue.pop(0)) # C
创建了一个空的列表作为队列,然后使用 append() 方法向队列的末尾添加了三个元素,使用 pop() 方法从队列的开头删除元素并返回它们。由于队列是一个先进先出的数据结构,所以得到的输出结果是 'A'、'B' 和 'C'。
2、extend() 函数
用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- seq -- 元素列表,可以是列表、元组、集合、字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。
该方法没有返回值,但会在已存在的列表中添加新的列表内容。
list1 = ['Google', 'Runoob', 'Taobao'] list2=list(range(5)) # 创建 0-4 的列表 list1.extend(list2) # 扩展列表 print ("扩展后的列表:", list1)
扩展后的列表: ['Google', 'Runoob', 'Taobao', 0, 1, 2, 3, 4]
# 语言列表 language = ['French', 'English', 'German'] # 元组 language_tuple = ('Spanish', 'Portuguese') # 集合 language_set = {'Chinese', 'Japanese'} # 添加元组元素到列表末尾 language.extend(language_tuple) print('新列表: ', language) # 添加集合元素到列表末尾 language.extend(language_set) print('新列表: ', language)
新列表: ['French', 'English', 'German', 'Spanish', 'Portuguese']
新列表: ['French', 'English', 'German', 'Spanish', 'Portuguese', 'Chinese', 'Japanese']
3、将对象插入列表
insert() 函数用于将指定对象插入列表的指定位置。
insert()方法语法:list.insert(index, obj)
- index -- 对象obj需要插入的索引位置。
- obj -- 要插入列表中的对象。
该方法没有返回值,但会在列表指定位置插入对象。
list1 = ['Google', 'Runoob', 'Taobao'] list1.insert(1, 'Baidu') print ('列表插入元素后为 : ', list1)
列表插入元素后为 : ['Google', 'Baidu', 'Runoob', 'Taobao']
13、删除、移除
1、pop() 函数
用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
pop()方法语法:list.pop([index=-1])
- index -- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
该方法返回从列表中移除的元素对象。
list1 = ['Google', 'Runoob', 'Taobao'] list1.pop() print ("列表现在为 : ", list1) list1.pop(1) print ("列表现在为 : ", list1)
列表现在为 : ['Google', 'Runoob']
列表现在为 : ['Google']
2、移除列表中某个值的第一个匹配项
remove() 函数用于移除列表中某个值的第一个匹配项。在原列表中根据值删除(从左到右找到第一个删除)【慎用,里面没有会报错】
remove()方法语法:list.remove(obj)
- obj -- 列表中要移除的对象。
该方法没有返回值但是会移除列表中的某个值的第一个匹配项。
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu'] list1.remove('Taobao') print ("列表现在为 : ", list1) list1.remove('Baidu') print ("列表现在为 : ", list1)
列表现在为 : ['Google', 'Runoob', 'Baidu']
列表现在为 : ['Google', 'Runoob']
3、del语句
list = ['Google', 'Runoob', 1997, 2000] print ("原始列表 : ", list) del list[2] print ("删除第三个元素 : ", list) 结果 原始列表 : ['Google', 'Runoob', 1997, 2000] 删除第三个元素 : ['Google', 'Runoob', 2000]
4、clear() 函数用于清空列表,类似于 del a[:]
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu'] list1.clear() print ("列表清空后 : ", list1)
列表清空后 : []
14、更新列表
list = ['Google', 'Runoob', 1997, 2000] print ("第三个元素为 : ", list[2]) list[2] = 2001 print ("更新后的第三个元素为 : ", list[2]) list1 = ['Google', 'Runoob', 'Taobao'] list1.append('Baidu') print ("更新后的列表 : ", list1)
结果
第三个元素为 : 1997
更新后的第三个元素为 : 2001
更新后的列表 : ['Google', 'Runoob', 'Taobao', 'Baidu']
15、截取与拼接
# 列表截取 L=['Google', 'Runoob', 'Taobao'] L[2] # 'Taobao' L[-2] #'Runoob' L[1:] # ['Runoob', 'Taobao'] # 列表拼接 squares = [1, 4, 9, 16, 25] squares += [36, 49, 64, 81, 100] squares # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
16、排序
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
sort()方法语法:list.sort( key=None, reverse=False)
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
aList = ['Google', 'Runoob', 'Taobao', 'Facebook'] aList.sort() print ( "List : ", aList) # List : ['Facebook', 'Google', 'Runoob', 'Taobao'] #降序输出列表 # 列表 vowels = ['e', 'a', 'u', 'o', 'i'] # 降序 vowels.sort(reverse=True) # 输出结果 print ( '降序输出:', vowels ) # 降序输出: ['u', 'o', 'i', 'e', 'a']
通过指定列表中的元素排序来输出列表
# 获取列表的第二个元素 def takeSecond(elem): return elem[1] # 列表 random = [(2, 2), (3, 4), (4, 1), (1, 3)] # 指定第二个元素排序 random.sort(key=takeSecond) # 输出类别 print ('排序列表:', random) # 排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]
17、列表比较
列表比较需要引入 operator 模块的 eq 方法
# 导入 operator 模块 import operator a = [1, 2] b = [2, 3] c = [2, 3] print("operator.eq(a,b): ", operator.eq(a,b)) # operator.eq(a,b): False print("operator.eq(c,b): ", operator.eq(c,b)) # operator.eq(c,b): True
18、复制列表
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu'] list2 = list1.copy() print ("list2 列表: ", list2) # list2 列表: ['Google', 'Runoob', 'Taobao', 'Baidu']
19、列表反向
list1 = ['Google', 'Runoob', 'Taobao', 'Baidu'] list1.reverse() print ("列表反转后: ", list1) # 列表反转后: ['Baidu', 'Taobao', 'Runoob', 'Google']
20、统计元素出现次数
count() 方法用于统计某个元素在列表中出现的次数。
aList = [123, 'Google', 'Runoob', 'Taobao', 123]; print ("123 元素个数 : ", aList.count(123)) print ("Runoob 元素个数 : ", aList.count('Runoob'))
123 元素个数 : 2
Runoob 元素个数 : 1
21、嵌套列表
列表属于容器,内部可以存放各种数据,所以他也支持列表的嵌套,如:
data = [ "谢广坤",["海燕","赵本山"],True,[11,22,[999,123],33,44],"宋小宝" ]
对于嵌套的值,可以根据之前学习的索引知识点来进行学习
data = [ "谢广坤",["海燕","赵本山"],True,[11,22,33,44],"宋小宝" ] print( data[0] ) # "谢广坤" print( data[1] ) # ["海燕","赵本山"] print( data[0][2] ) # "坤" print( data[1][-1] ) # "赵本山" data.append(666) print(data) # [ "谢广坤",["海燕","赵本山"],True,[11,22,33,44],"宋小宝",666] data[1].append("谢大脚") print(data) # [ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,22,33,44],"宋小宝",666 ] del data[-2] print(data) # [ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,22,33,44],666 ] data[-2][1] = "alex" print(data) # [ "谢广坤",["海燕","赵本山","谢大脚"],True,[11,"alex",33,44],666 ] data[1][0:2] = [999,666] print(data) # [ "谢广坤",[999,666,"谢大脚"],True,[11,"alex",33,44],666 ]
22、相加
两个列表相加获取生成一个新的列表。
data = ["赵四","刘能"] + ["宋晓峰","范德彪"] print(data) # ["赵四","刘能","宋晓峰","范德彪"] v1 = ["赵四","刘能"] v2 = ["宋晓峰","范德彪"] v3 = v1 + v2 print(v3) # ["赵四","刘能","宋晓峰","范德彪"]
23、相乘
列表*整型 将列表中的元素再创建N份并生成一个新的列表。
data = ["赵四","刘能"] * 2 print(data) # ["赵四","刘能","赵四","刘能"] v1 = ["赵四","刘能"] v2 = v1 * 2 print(v1) # ["赵四","刘能"] print(v2) # ["赵四","刘能","赵四","刘能"]
24、转换
#int、bool无法转换成列表 #str name = "测试" data = list(name) # ["测","试"] print(data) #超前 v1 = (11,22,33,44) # 元组 vv1 = list(v1) # 列表 [11,22,33,44] v2 = {"alex","eric","dsb"} # 集合 vv2 = list(v2) # 列表 ["alex","eric","dsb"]