Python基础数据类型之列表(容器型数据类型)
-
列表
- 列表是Python中最基本的数据结构,是一个容器型的数据类型,可以盛放任何数据类型。列表中的每个元素都分配一个位置,叫做索引,第一个位置的索引是0,第二个位置的索引是1,依此类推。
-
列表的创建
-
方法一(直接加中括号)
l = [1, "Python"]
-
方法二(使用list()方法)
l = list("Python") print(l) # 输出结果: ['P', 'y', 't', 'h', 'o', 'n'] # 注意:list()内必须是一个可迭代的对象
-
-
Python列表(list)的增、删、改、查
-
增:
有三种方式:
-
append(追加,只能追加到最后)
用法:
l = ["Python", "列表", "增", "删", "改", "查"] l.append("学习") print(l) # 输出结果:['Python', '列表', '增', '删', '改', '查', '学习'] # 不能通过 print(l.append) 这种方式进行打印
应用场景举例:
user_list = [] while 1: add_user = input("请输入需要增加的用户名(按Q或q退出):").strip() if add_user.upper() == "Q": print("程序退出!") break else: user_list.append(add_user) print("用户已添加!") print(user_list)
-
insert(可以指定位置插入)
用法:
l = ["Python", "列表", "增", "删", "改", "查"] l.insert(2, "的") print(l) # 输出结果:['Python', '列表', '的', '增', '删', '改', '查']
-
extend(迭代追加)
用法:
l = ["Python", "列表", "增", "删", "改", "查"] l.extend('学习') print(l) # 输出结果:['Python', '列表', '增', '删', '改', '查', '学', '习'] l = ["Python", "列表", "增", "删", "改", "查"] l.extend(["学习", ]) print(l) # 输出结果:['Python', '列表', '增', '删', '改', '查', '学习']
-
-
删:
有六种方式:
-
pop(按照索引位置删除)
用法:
l = ["Python", "列表", "增", "删", "改", "查"] l.pop() print(l) # 默认删除最后一个元素 # 输出结果:['Python', '列表', '增', '删', '改'] l = ["Python", "列表", "增", "删", "改", "查"] l.pop(3) print(l) # 输出结果:["Python", "列表", "增", "改", "查"] l = ["Python", "列表", "增", "删", "改", "查"] print(l.pop(3)) # pop具有返回值,返回的是删除的元素 # 输出结果:删
-
remove(按照指定元素删除,如果有重复元素,默认从左往右删除第一个)
用法:
l = ["Python", "列表", "增", "删", "改", "查"] l.remove("删") # 没有返回值 print(l) # 输出结果:['Python', '列表', '增', '改', '查']
-
del(列表、字典通用,可按照索引、切片删除)
用法:
# 按照索引删除 l = ["Python", "列表", "增", "删", "改", "查"] del l[3] print(l) # 输出结果:['Python', '列表', '增', '改', '查'] # 按照切片删除 l = ["Python", "列表", "增", "删", "改", "查"] del l[::2] print(l) # 输出结果:['列表', '删', '查']
-
clear(清空列表中的所有元素)(了解)
用法:
l = ["Python", "列表", "增", "删", "改", "查"] l.clear() print(l) # 输出结果:[]
-
for循环删除
注意:在使用for循环按照索引删除列表元素的时候,一定要注意正向步长删除会引起元素索引的变化,导致删除结果错误,因此为保证for循环按照索引删除元素时索引变化不影响删除结果,一般采用反向步长,从后往前删,此方法称之为“倒叙删除法”。
(在循环一个列表时,最好不要改变一个列表的大小,这样有可能会影响最终的结果。)
用法:
l = [1, 2, 3, 4, 5, 6] # 删除列表中索引为奇数位置的元素 for i in range(len(l)-1,-1,-1): if i % 2 == 1: l.pop(i) print(l) # 输出结果:[1, 3, 5]
-
思维置换法(思路,从列表中取得想要的值产生新的列表,然后用新的列表替换原有列表)
用法:
l = [1, 2, 3, 4, 5, 6] # 删除列表中的1,3,4,6 list_1 = [l[1]] list_2 = [l[-2]] l = list_1 + list_2 print(l) # 输出结果:[2, 5]
-
-
改:
-
按照索引改值
l = ["Python", "列表", "增", "删", "改", "查"] l[4] = "按照索引改值" print(l) # 输出结果:['Python', '列表', '增', '删', '按照索引改', '查']
-
按照切片改值(了解)
l = ["Python", "列表", "增", "删", "改", "查"] l[2:] = "按照切片改值" print(l) # 输出结果:['Python', '列表', '按', '照', '切', '片', '改', '值'] l = ["Python", "列表", "增", "删", "改", "查"] l[::2] = "abc" # 切片加步长,就必须将迭代的元素与修改的值对应上,即改几个元素就得写几个元素。 print(l) # 输出结果:['a', '列表', 'b', '删', 'c', '查']
-
-
查:
按照索引查询
按照切片查询
-
for循环查询
用法:
l = ["Python", "列表", "增", "删", "改", "查"] for i in l: print(i) ''' 输出结果: Python 列表 增 删 改 查 '''
-
-
列表的嵌套
l = [1, ["Python", ["列", "表"], "的", "嵌套"]]
-
将列表中的 "Python" 变成大写
l = [1, ["Python", ["列", "表"], "的", "嵌套"]] l[1][0] = l[1][0].upper() print(l) # 输出结果:[1, ['PYTHON', ['列', '表'], '的', '嵌套']]
-
给列表 l 中的列表 ["列", "表"] 增加一个元素"&"
l = [1, ["Python", ["列", "表"], "的", "嵌套"]] l[1][1].insert(1,"&") print(l) # 输出结果:[1, ['Python', ['列', '&', '表'], '的', '嵌套']]
-
给列表 l 中的 ["列", "表"] 通过字符串拼接的方式变成 ["列", "表的"],并删除列表 l 中的 "的" 元素
l = [1, ["Python", ["列", "表"], "的", "嵌套"]] l[1][1][1] = l[1][1][1] + "的" # 等号左边的 l[1][1][1] 表示要改元素"表" l[1].pop(2) print(l) # 输出结果:[1, ['Python', ['列', '表的'], '嵌套']] # 代码可以精简成: l = [1, ["Python", ["列", "表"], "的", "嵌套"]] l[1][1][1] += "的" # count = count + 1 可以简写成 count += 1 l[1].pop(2) print(l) # 输出结果:[1, ['Python', ['列', '表的'], '嵌套']]
-
给列表 l 中的列表 ["列", "表"] 变成字符串 "列表"
l = [1, ["Python", ["列", "表"], "的", "嵌套"]] l[1][1] = "".join(l[1][1]) print(l) # 输出结果:[1, ['Python', '列表', '的', '嵌套']]
-
-
列表的内置方法
-
count:计算列表中指定元素出现的次数
l = ["Python", "列表", "的", "内置", "方法"] print(l.count("Python")) #输出结果:1
-
index:找到指定元素在列表中的索引位置
l = ["Python", "列表", "的", "内置", "方法"] print(l.index("的")) #输出结果:2
-
sort:给列表中的数字或字符串进行排序,且列表中不能既有数字也有字符串,字符串按照字幕的顺序排序,一般用于数字排序。默认从小到大排序。
# 从小到大排列 l = [3,2,5,4,6,8,7,9] l.sort() print(l) #输出结果:[2, 3, 4, 5, 6, 7, 8, 9] # 从大到小排列 l = [3,2,5,4,6,8,7,9] l.sort(reverse=True) print(l) #输出结果:[9, 8, 7, 6, 5, 4, 3, 2]
-
reverse:反转排序
l = [3,2,5,4,6,8,7,9] l.reverse() print(l) #输出结果:[9, 7, 8, 6, 4, 5, 2, 3]
-
-
列表的运算(Python 3.4之后的列表支持相加和与数字相乘)
-
列表相加
list_1 = ["Python", "列表", 3, 2, "的", "内置", "方法"] list_2 = [3,2,5,4] print(list_1 + list_2) # 输出结果:['Python', '列表', 3, 2, '的', '内置', '方法', 3, 2, 5, 4]
-
列表与数字相乘
l = [1, 2] print(l * 3) #输出结果:[1, 2, 1, 2, 1, 2]
-
-
列表推导式(可以用一行代码快速创建一个比较复杂且有规律的列表)
-
循环模式(
[变量1 for 变量2 in 可迭代对象]
)# 创建一个包含数字1到10的列表 l = [] for i in range(1,11): l.append(i) print(l) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 使用列表推导式 l = [i for i in range(1,11)] print(l) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 构建一个Python-1到Python-100的列表 l = [f'Python-{i}' for i in range(1,101)] print(l)
-
筛选模式(
[变量1 for 变量2 in 可迭代对象 if 判断条件]
)# 创建一个包含从1到10中所有偶数的列表 l = [i for i in range(1,11) if i % 2 == 0] print(l) # [2, 4, 6, 8, 10] # 将含有两个o的所有单词留下,组成一个新的列表(没有使用列表推导式) word_list = [ ['food','eat','foot','hand'], ['dog','bear','root','colour'] ] l = [] for i in word_list: for word in i: if word.count('o') == 2: l.append(word) print(l) # 将含有两个o的所有单词留下,组成一个新的列表(使用列表推导式) word_list = [ ['food','eat','foot','hand'], ['dog','bear','root','colour'] ] l = [word for i in word_list for word in i if word.count('o') == 2] print(l)
-
列表推导式的优缺点
-
优点:
-
一行构建,简单
# 用一行代码构建一个列表:[2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A'] l = [i for i in range(2,11)] + list('JQKA') # 就问你牛逼不牛逼?!!!
-
-
缺点
- 列表推导式只能构建比较复杂且有规律的列表,注意,是有规律的列表;
- 超过三层循环才能构建成功的列表,就不建议使用列表推导式了;
- 无法开启debug模式,也就是说进行Trouble Shooting时会相对来说困难些。
-
-