【python百炼成魔】python之列表详解


在这里插入图片描述

一. 列表的概念

1.1 列表是什么?

列表的英文单词是list, 它是python中一种可以动态添加和删除内容的数据类型,又很多个元素组成。 通俗的说就是列表就是将多个变量组合在一起的容器。

1.2 为什么要使用列表?

我们都知道变量可以存储一个元素,而列表是一个大容器,可以存储N个元素,程序可以方便的对这些元素进行操作。

在Python中一切皆为对象,所以变量存储的就是一个对象的引用。

1.3 列表的定义

列表的格式定义如下:

my_list = [元素1,元素2,元素3...]

列表中每一个数据称作元素活着项,列表用[] 包裹,每个元素用英文的,分割,列表可以直接打印输出:

my_list = ["apple", "orange", "grape", "pear"]
print(my_list)

列表中也可以是相同的元素,比如:

my_list = ["mufeng", "mufeng", "19", "19"]
print(my_list)

列表中也可以加别的类型,比如再增加个列表:

my_list = ["mufeng", "mufeng", "19", "19" ,  ["apple", "orange", "grape", "pear"]]
print(my_list)

执行结果:

在这里插入图片描述
在这里插入图片描述

二. 列表的增删改查操作

2.1 列表的读取

列表示意图:
在这里插入图片描述

这里需要学习两个名词:一个是索引,另一个是下标,这两个词是同一个意思,都是为了准确的获取列表中的元素。
列表中的索引是从0开始的,如果是倒序就从-1开始。

在上面的图表中: 索引为0的元素是 hello, 索引为1的是world, 依次类推。

案例一: 我们来看看一个列表的ID和他的类型,已经最终展示的形态

lst=['hello','world',123,96.6,"world",125,"world"]
print(id(lst))
print(type(lst))
print(lst)

在这里插入图片描述
案例二: 从案例一点列表中分别取出下标为1,2,3,4的元素以及倒数第一个和第二个

lst=['hello','world',123,96.6,"world",125,"world"]
print("索引为0的元素", lst[0])
print("索引为1的元素" ,lst[1])
print("索引为2的元素", lst[2])
print("索引为0的元素", lst[3])
print("索引为4的元素", lst[4])

#倒序
## 获取最后一个元素 -1
print("列表最后一个元素", lst[-1])
print("列表倒数第二个元素" ,lst[-2])

执行结果:
在这里插入图片描述

案例三: 根据索引获取指定的元素

lst=['hello','world',19,'mufeng']
print(lst.index('hello'))
print(lst.index(19,1,4))

执行结果

0
2

这里就是根据元素hello查找索引 ,结果为0
在索引1-4里查找19的索引,结果为2

在这里插入图片描述

2.2 列表的切片

在对列表的操作中经常遇到这中操作:

  • 获取1-3项元素
  • 获取第1,3,5,7项元素
  • 获取第4-6项目元素

这些在编程中被成为切片操作。

具体的语法如下:

# 读取从索引 m 到 n-1 的列表元素
my_list[m:n]
# 读取列表的前 n 项元素
my_list[:n]
# 读取列表从 m 开始到结尾的元素
my_list[m:]
# 间隔 s,读取从 m 到 n 的列表元素
my_list[m:n:s]

案例一: 步长为正数的时候


lst=[1,2,3,4,5,6,7,8,9,]
print(lst[1:6:1]) #[2, 3, 4, 5, 6]

lst[1:6:1] 表示: 从索引1开始到索引6结束,步长为1,一般默认步长为1

案例二:步长为正数其他写法:

步长如果省略不写,则默认为1


lst=[1,2,3,4,5,6,7,8,9,]
print(lst[1:6:1]) #[2, 3, 4, 5, 6]
print(lst[1:6])
print(lst[1:6:])
print(lst[1:6:2])
print(lst[:6:2])

结果:
在这里插入图片描述

案例三: 步长为负数的情况


lst=[1,2,3,4,5,6,7,8,9,]
print(lst[::-1])

这种情况相当于取反结果为:

[9, 8, 7, 6, 5, 4, 3, 2, 1]

也这可以这么写:


lst=[1,2,3,4,5,6,7,8,9,]
print(lst[8::-1]) #[9, 8, 7, 6, 5, 4, 3, 2, 1]

2.3 列表的查询操作

2.3.1 not in ,in 表达式

判断指定元素是否在列表中存在

  • 元素in 列表名
  • 元素 not in 列表名
lst=[1,2,3,4,5,6,7,8,9,]
print(2 not in lst)

2.3.2 列表元素遍历

元素遍历也是查询过程中的一种,先遍历出来在最遍历出来的内容做操作。

语法:

for 可迭代变量 in 列表

lst=[1,2,3,4,5,6,7,8,9,]
for item in lst:
    print(item)

2.4 列表元素的增加操作

列表元素的增加操作有以下几个函数:
append() 在列表末尾加一个元素
extend() 在列表末尾添加一个元素
insert() 在列表的任意位置添加一个元素
切片: 在列表的任意位置添加一个元素

2.4.1 append()的相关用法

案例一: 使用append()函数在列表末尾加上一个元素:

lst=[1,2,3]
print("添加元素之前",lst,id(lst))
lst.append(100)
print('添加元素之后',lst,id(lst))


执行结果:
在这里插入图片描述

可以看到,ID是相同的,也就是没有生成新的列表

案例二: 使用append()方法 追加一个列表

lst=[1,2,3]
print("添加元素之前",lst,id(lst))
lst.append(100)
print('添加元素之后',lst,id(lst))

lst2=['hello','world']
lst.append(lst2)
print(lst)

输出:
在这里插入图片描述

这里可以看到,append可以将列表 lst2作为一个元素添加到末尾

2.4.2 extend()方法的相关用法

extend() 是扩展到意思,我们来看案例:


lst=[1,2,3]
lst2=['hello','world']
print(lst)
lst.extend(lst2)
print(lst)

执行结果:
在这里插入图片描述
这里可以发现,我们用extend追加列表,是把列表的内容写到原来的lst中了,并不是把LST2作为一个整体插入的。

append 方法可以给列表追加元素,而extend可以给列表追加一个列表,相当于将两个列表进行连接。

2.4.3 insert() 方法的使用

上面我们学习过的append是在列表的末尾固定插入元素,而insert 是在任意位置插入,语法如下:

my_list.insert(索引位置,"新增元素")

案例一: 我们尝试在索引2的位置,插入90


lst=[1,2,3]
lst.insert(2,90)
print(lst)

在这里插入图片描述
执行结果:

[1, 2, 90, 3]

2.4.4 用切片的方式在任意位置添加元素

切片也可以在任意位置添加元素,比如lst[2:] 表示把索引为2,且包括索引2后面的内容切掉


lst=[1,2,3,4]
lst3=['hello','world','沐风晓月']
lst[2:]=lst3
print(lst)

在这里插入图片描述

可以看到,它把索引2后面的都切掉了,然后把lst3添加到lst里了

切片实际上就是切掉一部分,用新的替换

在这里插入图片描述

2.5 列表元素的删除

列表元素的删除也有多个方法,如下:

  • remove() 一次删除一个元素,重复元素只删除第一个,元素不存在抛出valueerror

  • pop() 删除一个指定索引位置上的元素

  • 切片: 一次至少删除一个元素(切片会产生一个新的列表对象)

  • clear() 清空列表

  • del() 删除列表

案例一: 删除索引为2的元素

lst=[1,2,3,4]
lst.pop(2)
print(lst) #[1, 2, 4]

案例二: 不指定索引默认删除最后一个元素


lst=[1,2,3,4]

#pop() 不指定索引删除最后一个
lst.pop()
print(lst)#[1, 2, 3]

案例三: 直接删除指定的元素 remove()
pop方法需要按照索引删除的元素,而remove直接可以指定元素,但remove删除元素后,不会返回被删除的元素,另外当列表中不存在被删除的元素,会提示代码错误。

如果被删除的元素有重名的情况,默认删除第一个

语法格式为:

my_list.remove(待删除元素内容)

lst=[1,2,3,4]
lst3=['hello','world','沐风晓月']

lst3.remove("hello")

执行结果:
在这里插入图片描述

这里不会返回任何结果,不像pop方法,还会显示被删除后的列表:

案例四: 清空列表 clear()方法

清空后,还存在列表,但是删除后就没有了,删除列表用del list


lst=[1,2,3,4]

#clear() 清空列表
lst.clear()
print(lst)

删除列表


lst=[1,2,3,4]

del lst

print(lst)

删除后就没有了,打印会提示没有定义

在这里插入图片描述

2.6 列表元素的修改

列表元素的修改:

  • 为指定索引元素赋新值
  • 为指定的切片赋予一个新值
lst=[1,2,3,4]

#一次修改一个值
lst[2]=100
print(lst)#[1, 2, 100, 4]

使用切片来替换


lst=[1,2,3,4]

lst[1:3]=[30,40,50,60]
print(lst)

在这里插入图片描述
这个就是把2和3去掉,然后用30,40,50,60 代替

如果你已经看到了这里,那你:

在这里插入图片描述

三. 列表的排序操作

除了对列表增删改查外还会涉及到排序等相关的操作,使用固定的方法即可。
两种方法:

  1. 调用sort()方法,列表中所有的元素默认按照从小到大的顺序来排序,可以指定reverse=True 进行降序排序
  2. 调用内置函数 sorted() ,可以指定reverse=True进行降序排序,原列表不发生改变。此方法会产生一个新的列表对象

3.1 sort方法的排序操作

默认从小到大,也可以修改为从大到小,该方法一般用于纯数字或者纯英文字符的列表排序。

语法格式:
my_list.sort()

案例一: 声明一个包含数字的列表进行排序


lst=[1,2,3,4,88,77,5,46]
print('排序前的列表',lst)
lst.sort()
print('排序后的列表',lst)
lst.sort(reverse=True)
print('降序排序',lst)

在这里插入图片描述

3.2 使用sorted进行排序

sort排序会对源列表进行永久修改,很多时间并不需要修改原列表,这种情况下就可以借助于sorted函数。 需要注意的是 sorted是一个内置函数,并不是列表的方法,也就是sorted可以对很多种类的对象进行排序。

语法:

sorted(待排序列表) # 正序,从小到大
sorted(待排序列表,reverse=True) # 逆序,从大到小

案例一: 定义一个list列表并进行排序

lst=[1,2,3,4,88,77,5,46]
print('排序前的列表',lst)
newlst=sorted(lst)
print(lst)
print(newlst)

两个区别就是: sort()是对原列表进行操作,sorted()是生成新列表,生成的新列表需要用新变量接收。

四. 列表的其他方法

4.1 统计某元素在列表中出现的次数

通过count方法可以获取元素在列表中出现的次数:

次数 = my_list.count(待查找值)

案例: 查找3在列表中出现的次数

my_list = [3, 4, 3, 2, 3, 8, 7]
nums = my_list.count(3)

print(nums)

4.2 列表转换为字符串

通过john方法可以将所有的元素组合成一个字符串,语法如下:

连接字符串.join(待转换列表)

my_list = ["pear", "apple", "orange"]
my_str = "#".join(my_list)

print(my_str)

执行结果:
在这里插入图片描述

4.3 将字符串转换为列表

通过内置函数 list,可以将字符串转换成列表,类似于强制转换:

my_str = "abcdefghi"
print(list(my_str))

结果如下:

在这里插入图片描述
字符串也有自己的方法,我们给他变成列表就可以使用列表的方法。对于列表的方法比较多,需要反复练习。

在这里插入图片描述

总结

【python百炼成魔】python之列表详解

👍 【python百炼成魔】python之列表详解

⭐️ 【python百炼成魔】python之列表详解

✏️ 【python百炼成魔】python之列表详解

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年3月4日 下午9:29
下一篇 2023年3月4日 下午9:32

相关推荐

此站出售,如需请站内私信或者邮箱!