Python中关于列表list的各种技能整理【定义、增删查改、函数、列表表达式】附练习题
今天带大家温习的是Python中的列表操作,全篇博文没有难点问题,很基础但是也很重要,推荐对Python还不够熟悉的朋友赶紧掌握起来哦。
大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师。欢迎大家跟我一起走进数据分析的世界,一起学习!
感兴趣的朋友可以关注我的数据分析专栏,里面有许多优质的文章跟大家分享哦。
今天带大家温习的是Python中的列表操作,全篇博文没有难点问题,很基础但是也很重要,推荐对Python还不够熟悉的朋友赶紧掌握起来哦。
目录
1 定义列表
列表可以理解为可变的元组,它的使用方式跟元组差不多,区别就是列表可以动态的增加、修改、删除元素。
看一下列表的定义:
# 定义一个空列表
lst = []
lst = list()
# 定义带有初始值的列表
lst = [1, 2, 3]
lst = ["a", 1, 2, 3, "b", "c"]
lst = list(range(5))
lst = list("abc")
lst = list((1, 2, 3))
以上方式都可以定义一个列表。注意变量名使用了lst,有意的避开了list,虽然list不是关键字,但我们在命名变量的时候不要使用这些内置名称,否则可能会引起无法预知的错误。
2 增删改查
列表的访问和字符串、元组一样,索引或者下标都可以。
lst = ['a', 'b', 'c', 'd', 'e']
lst[0] # 'a'
lst[1:3] # ['b', 'c']
列表是可以修改的, 还是以上面的lst为例:
lst.append('x')
往lst里添加了一个元素,现在列表变成了
['a', 'b', 'c', 'd', 'e', 'x']
注意append函数总是在列表后面添加元素,列表的长度也增加了1.因此原来list[-1]的值从原来的’e’变成 了’x’,
len(lst) # 6
lst[-1] # 'x'
修改列表中的元素
lst[-1] = 'f'
# 修改后列表变为:
# ['a', 'b', 'c', 'd', 'e', 'f']
删除列表中的元素
del lst[0]
# 删除后列表变为:
# ['b', 'c', 'd', 'e', 'f']
注意,由于我们删除的是第一个元素,现在剩下的所有元素的索引都发生了变化,第一个lst[0]变成了’b’,后面的也都往前挪了一位。但是lst[-1]没有变,还是’f’。涉及到删除操作的时候要小心,防止使 用错误的索引。
3 列表函数
列表也是一种序列,它也具有index和count函数和支持len函数,这些函数的用法和元组一样,它的循环遍历也和元组一样,不再赘述。下面来介绍一下列表特有的一些函数。
insert
insert函数和刚刚介绍的append函数一样,用来向列表中添加一个新的元素,区别就是append是在最后添加,insert则可以向任意位置添加。
lst = ['a', 'c', 'e']
# 在第二个元素'c'前面插入一个字符串'b'
lst.insert(1, 'b')
# lst现在的值是['a', 'b', 'c', 'e']
# 在最后一个元素'e'前面插入一个字符串'd'
lst.insert(-1, 'd')
# lst现在的值是['a', 'b', 'c', 'd', 'e']
pop
每次调用pop函数会从列表中“弹”出一个元素,接着上面的lst操作
temp = lst.pop()
print(lst) # ['a', 'b', 'c', 'd']
print(temp) # 'e'
我们发现列表最后一个元素’e’不见了,并被在控制台打印出了。如果想“弹”出其他位置的元素,可以传 一个位置参数给pop函数,像这样:
temp = lst.pop(2)
print(lst) # ['a', 'b', 'd']
print(temp) # 'c'
remove
前面我们已经学习了使用del关键字去删除列表元素,del操作可删除指定下标索引的元素,如果我们要删除指定内容的元素,就需要用到remove函数。
lst = [1, 2, 1, 'a', 'b', 'c']
lst.remove('a')
print(lst) # lst的值为[1, 2, 1, 'b', 'c']
lst.remove(1) # 注意这里的1是元素值,不是索引
print(lst) # lst的值为[2, 1, 'b', 'c']
remove函数会从左至右找到与指定的值相匹配的第一个元素,并将它删除。在使用的时候需要区分del, pop, remove的区别。
clear
clear函数会清空列表内的所有元素。
lst = [1,2,3,4]
lst.clear()
print(lst) # 结果为[]
extend
extend函数有点像append函数,但append函数每次只能添加一个元素,而extend可以添加一组。 lst = []
lst.extend(range(5))
print(lst) # [0, 1, 2, 3, 4]
lst.extend([5, 6, 7])
print(lst) # [0, 1, 2, 3, 4, 5, 6, 7]
reverse
将整个列表反转,以上一步的lst为例
lst.reverse()
print(lst) # [7, 6, 5, 4, 3, 2, 1, 0]
sort
按照一定的规则将列表中的元素重新排序,对于数值,默认按从小到大的顺序排列。 lst = [3, 5, 2, 1, 4]
lst.sort()
print(lst) # [1, 2, 3, 4, 5]
如果想要让列表从大到小排列,可以加上reverse参数。 lst = [3, 5, 2, 1, 4]
lst = [3, 5, 2, 1, 4]
lst.sort(reverse=True)
print(lst) # [5, 4, 3, 2, 1]
对于字符串,则会按照它们的ASCII值的顺序排列。ASCII是基于拉丁字母的一套电脑编码系统,所有的编程语言都支持ASCII编码。ASCII值一共有128个字符,包含数字0~9,字母a-z, A-Z,还有一些常用的符号。每一个字符对应一个数字,比如字母’A’对应的就是65, 字母’B’对应66,等等。在Python中,可以使用内置函数将字符与它的ASSCII值互转。
ord('A') # 65
chr(66) # 'B'
sort函数会比对每个字符串的第一个字符,如果第一个字符相同,则比对第二个字符,以此类推。
fruits = ['apple', 'banana', 'orange', 'blueberry']
fruits.sort()
print(fruits) # ['apple', 'banana', 'blueberry', 'orange']
注意观察"banana"和"blueberry"的顺序。
如果列表的元素不是简单的字符或者数字,那怎么进行排序呢,比如有下面一个列表,它存储了公司第一季度每个月的收入。
revenue = [('1月', 5610000), ('2月', 4850000), ('3月', 6220000)]
注意列表中的每一个元素是一个元组,元组的第一项是月份,第二项是销售额,现在想要按照它的销售额来从高到低排序。如果直接调用sort函数,它会按照元组中第一项的字符串顺序进行排序。
revenue.sort(reverse=True) # 排序后为 [('3月', 6220000), ('2月', 4850000), ('1月', 5610000)]
这显然不对,2月的收入比1月低,应该排到最后。这时应该传递key参数
revenue.sort(reverse=True, key=lambda x:x[1]) # 排序后为 [('3月', 6220000), ('1月', 5610000), ('2月', 4850000)]
key参数接收的是一个函数,我们在这里给它传递了一个匿名函数,关于函数的使用后面再学习,这里我们需要了解是通过key参数,我们指定了sort排序的依据,就是每个元组里面的第二项。
copy
lst1 = [1, 2, 3]
lst2 = lst1
lst1.append(4)
上面的代码执行完成以后,lst 和 lst2的值都变成了 [1, 2, 3, 4] ,但我们在代码里面只修改了lst1, lst2的值也跟着改变了,这不符合我的预期,可能会导致bug。所以,如果我们想要创建一个跟lst1一模一样的新列表,且不再受它以后操作的影响,就可以使用copy函数:
lst1 = [1, 2, 3]
lst2 = lst1.copy()
lst1.append(4)
print(lst1) # [1, 2, 3, 4]
print(lst2) # [1, 2, 3]
4 列表表达式
列表表达式是一种快捷的创建列表的表达式,可以将多行代码省略为一行。比如,列出20以内的所有偶数
[i * 2 for i in range(10)] # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
当然,上面的代码我们也可以这样实现
[i for i in range(0, 20, 2)]
range函数可以接收三个参数:第一个是起始数值(包含),可以省略,默认从0开始;第二个是结束数值(不包含);第三个是步长,可以省略,默认为1。是不是有点像切片操作?
上面的代码就相当于:
even_nums = []
for i in range(0, 20, 2):
even_nums.append(i)
对比来看,列表表达式确实更简洁更优雅,再看一个例子,打印出大写的26个字母。
# 65是大写字母‘A’的ASCII值
print([chr(i) for i in range(65, 65 + 26)])
5 综合案例-销售数据统计-排行榜
再进一步,还记得前面写过的找出销售冠军的例子吗?
sales = (("Peter", (78, 70, 65)), ("John", (88, 80, 85)), ("Tony", (90, 99, 95)), ("Henry", (80, 70, 55)), ("Mike", (95, 90, 95)))
现在我们将计算出每人的总销售额,并按销售额从多到少,存放到一个列表里。
top_sales = []
for name, quarter_amount in sales:
total_amount = sum(quarter_amount)
top_sales.append((name, total_amount))
top_sales.sort(key=lambda x:x[1], reverse=True)
print(top_sales)
得到了一个下面的列表
[('Peter', 213), ('John', 253), ('Tony', 284), ('Henry', 205), ('Mike', 280)]
提示:这个案例用列表表达式来开发,将会非常快速。
top_sales = [(sale, sum(amount))for sale, amount in sales]
top_sales.sort(key=lambda x:x[1], reverse=True)
print(top_sales)
列表表达式是一种非常强大和方便的写法,不要求大家掌握,如果不会写列表表达式,也可以用for循环或while循环的方式来写,但至少要能看懂。
结束语
看完这篇,还有更多知识点分享给你哦,自己慢慢找哈,就在下面链接。
推荐关注的专栏
👨👩👦👦 机器学习:分享机器学习实战项目和常用模型讲解
👨👩👦👦 数据分析:分享数据分析实战项目和常用技能整理
往期内容回顾
💚 学习Python全套代码【超详细】Python入门、核心语法、数据结构、Python进阶【致那个想学好Python的你】
❤️ 学习pandas全套代码【超详细】数据查看、输入输出、选取、集成、清洗、转换、重塑、数学和统计方法、排序
💙 学习pandas全套代码【超详细】分箱操作、分组聚合、时间序列、数据可视化
💜 学习NumPy全套代码【超详细】基本操作、数据类型、数组运算、复制和试图、索引、切片和迭代、形状操作、通用函数、线性代数
关注我,了解更多相关知识!
CSDN@报告,今天也有好好学习

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)