全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)

🧡🧡🧡这篇是关于Python中列表的讲解,涉及到以下内容,欢迎点赞和收藏,你点赞和收藏是我更新的动力🧡🧡🧡

在这里插入图片描述

本文将从以下几个方面展开对列表的讲解:

1、列表究竟是一个什么东西?
2、如何去定义一个列表
3、列表常用操作有哪些
4、列表中涉及到迭代器,那么迭代器又是什么?
5、列表还有一些其他操作,该怎么样玩转列表?

1、列表概念

到底什么是列表?
在这里插入图片描述

回顾字符串,不清楚的朋友,可以查看我的字符串篇
🚀🚀🚀全网最全Python系列教程(非常详细)—字符串讲解(学Python入门必收藏)🚀🚀🚀
在这里插入图片描述
字符就是一个一个字符组合起来的
字符是一个有序的不可变序列

这里有一个非常非常非常重要的概念就是可变与不可变,在Python中可变与不可变如何体现?
在这里插入图片描述

str1 = 'python'
lst1 = [1, 2, 3]
print(id(lst1))  # 2554276364616

# 我们没有办法修改str1中的数据,只能改变整个字符串
# 所以字符串是一个不可变数据类型

# 对列表进行改变后,列表的id没有发生变化,这就是一个可变数据类型
lst1.append(10)
print(id(lst1))  # 2554276364616


2、列表定义

2.1、直接定义

在这里插入图片描述

lst1 = [10, 20, 30]

在这里插入图片描述

lst1 = [10, 20, 30, [1, 2, 3]]

在这里插入图片描述

注意和C语言中数组的区别:
在这里插入图片描述
C语言的数组是存放相同数据类型的
Python的列表可以存放不同的数据类型

2.2、列表生成式

在这里插入图片描述

lst1 = range(100)
print(lst1, type(lst1))

lst2 = list(range(100))
print(lst2, type(lst2))

在这里插入图片描述

为什么在Python3中,range()不直接生成一个列表?
在这里插入图片描述

2.3、列表推导式

在这里插入图片描述

在这里插入图片描述

# 假设现在有一个需求,需要创建一个列表,里面全部是一个列表中数据的平方
lst1 = [1, 2, 3, 4, 5]
lst2 = []

for val in lst1:
    lst2.append(val ** 2)

print(lst2)
# 我们在没有使用列表推导式的时候,需要这样写

lst3 = [i ** 2 for i in lst1]
print(lst3)

在这里插入图片描述

在这里插入图片描述

lst3 = [i ** 2 for i in lst1 if i % 2 == 0]
print(lst3)

在这里插入图片描述

当然,也可以从少到多

lst1 = [1, 2, 3]
lst2 = [i for i in lst1 for j in lst1]
print(lst2)

对比下面两种写法

lst1 = [1 for i in [1, 2, 3]]
lst2 = [i for i in [1, 2, 3]]

print(lst1)  # [1, 1, 1]
print(lst2)  # [1, 2, 3]

在这里插入图片描述


3、常用操作

3.1、增

3.1.1、append

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5]

lst1.append(100)
print(lst1)

3.1.2、insert

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5]

lst1.insert(1, 100)
print(lst1)

3.1.3 extend

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

lst1 = [1, 2, 3, 4, 5]

lst1.extend('python')
print(lst1)

lst2 = [1, 2, 3, 4, 5]
lst2.extend(lst2)
print(lst2)

3.1.4 、乘法和加法运算

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5]

# 可以对一个列表进行乘法
print(lst1 * 2)  # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

注意:extend和加法操作的区别

lst1 = [1, 2, 3, 4, 5]

lst1.extend('python')
print(lst1)

lst1 + 'python'

在这里插入图片描述

3.2、删

3.2.1、del语句

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5]

# del语句可以删除具体索引位置的值
del lst1[2]
print(lst1)  # [1, 2, 4, 5]

# del可以删除一个变量,包括数据和这个变量
del lst1
print(lst1)

3.2.2、pop

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5]

# 移除并返回列表中指定索引对应的元素
# 默认返回移除并返回最后一个元素
val1 = lst1.pop()
print(val1)

3.2.2、remove

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5, 1, 2, 1, 2, 3, 4, 5]

# 如果指定删除的元素存在多个就会删除最左边的一个,不会全部删除
lst1.remove(2)
print(lst1)  # [1, 3, 4, 5, 1, 2, 1, 2, 3, 4, 5]

注意:这里存在一个坑,一定要细心
有人肯定认为利用remove就可以删除列表中所有重复的元素,可是事实是这样吗?

lst1 = [1, 2, 3, 4, 5, 1, 2, 1, 2, 3, 4, 5]

# 如果指定删除的元素存在多个就会删除最左边的一个,不会全部删除
lst1.remove(2)
print(lst1)  # [1, 3, 4, 5, 1, 2, 1, 2, 3, 4, 5]

在这里插入图片描述

3.3、改

在这里插入图片描述

lst1 = [1, 2, 2, 2, 5, 1, 2, 1, 2]

# 一定要注意索引的越界问题
lst1[100] = 20  # IndexError: list assignment index out of range

3.4、查

3.4.1、获取单个元素

在这里插入图片描述

在这里插入图片描述

lst1 = [1, 2, 2, 2, 5, 1, 2, 1, 2]

print(lst1[0])
print(lst1[-1])

print(lst1[10])  # IndexError: list index out of range

注意:索引越界问题
在这里插入图片描述

3.4.2、index()

在这里插入图片描述

在这里插入图片描述

lst1 = [1, 2, 2, 2, 5, 1, 2, 1, 2]

# 获取元素的索引,返回从左到右第一个出现该元素的索引
print(lst1.index(2))

# 可以指定搜索区间
print(lst1.index(2, 5))

print(lst1.index(2, 5, 8))

3.4.3、count()

在这里插入图片描述

在这里插入图片描述

lst1 = [1, 2, 2, 2, 5, 1, 2, 1, 2]


print(lst1.count(2))

3.4.4、获取多个元素

在这里插入图片描述

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5]


print(lst1[1:4])

print(lst1[::-1])  # 反向输出

3.4.5、遍历操作

3.4.5.1、根据元素进行遍历

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5]


for val in lst1:
    print(lst1.index(val), '--->', val)

注意:

在这里插入图片描述

在这里插入图片描述

改进:

lst1 = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ]

# 设置一个索引的初始值,随着遍历的进行,每次限制索引的搜索范围
index_value = 0
for val in lst1:
    print(lst1.index(val, index_value), '--->', val)
    index_value += 1
3.4.5.2、根据索引进行遍历

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

# 我们只要知道一个列表中存在多少个索引,就可以通过索引访问到该元素
for index_value in range(len(lst1)):
    print(index_value, '--->', lst1[index_value])
3.4.5.3、创建枚举对象

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

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

enumerate_object = enumerate(lst1)
print(enumerate_object,type(enumerate_object))

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

enumerate_object = enumerate(lst1)
print(enumerate_object,type(enumerate_object))

# 创建枚举对象之后可以转换为list
# 返回的是一个列表,里面的元素为元组,分别是一个索引对应一个元素
print(list(enumerate_object))

# 可以指定枚举的起始位置,默认下标为0
for index, val in enumerate_object:
    print(index, '--->', val)

for index, val in enumerate(lst1, 100):
    print(index, '--->', val)
3.4.5.4、使用迭代器进行遍历

在这里插入图片描述

import collections

lst1 = [1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5]

# 创建一个迭代器
iter1 = iter(lst1)

# 判断是否是迭代器、可迭代对象
print(isinstance(iter1, collections.Iterator))
print(isinstance(iter1, collections.Iterable))

for val in iter1:
    print(val)

很多小伙伴肯定不理解上述的迭代器,所以下面一章,我会专门讲解迭代器相关内容,如果不懂,可以查看下一章内容,概念比较多,可以反复看几遍哦😁😁😁


4、迭代器

迭代器可以用来访问序列中的元素,本小结主要围绕以下内容对迭代器进行讲解:
1、迭代器究竟是一个什么东西?
2、为什么会需要有迭代器?
3、如何使用迭代器?
4、使用迭代器需要注意哪些内容?

4.1、迭代器是什么

在了解迭代器之前,需要首先知道几个概念:迭代、可迭代对象、迭代器。

4.1.1、迭代

在这里插入图片描述
迭代可以简单理解为遍历

4.1.2、可迭代对象

在这里插入图片描述

如何判定一个可迭代对象?
一个可迭代对象一定可以使用for循环进行遍历

lst1 = [1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5]

for val in lst1:
    print(val)

在这里插入图片描述
也可以使用一个库,判定一个对象是否为可迭代对象

import collections

lst1 = [1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5]
val1 = 'python'

print(isinstance(lst1, collections.Iterable))  # True

print(isinstance(val1, collections.Iterable))  # True

4.1.3、迭代器

在这里插入图片描述

在这里插入图片描述

import collections  
  
lst1 = [1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5]  
  
print(isinstance(lst1, collections.Iterator))

注意:
在这里插入图片描述

4.2、迭代器意义

1.仅仅在迭代到某个元素的时候,才处理该元素
在这里插入图片描述

例如斐波那契数列特别适合应用迭代器进行访问
在这里插入图片描述

  1. 提供了一个统一的访问集合的接口
    在这里插入图片描述
lst1 = [1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5]
tup1 = (10, 20, 30)

it1 = iter(lst1)
it2 = iter(tup1)

print(it1, type(it1))
print(it1, type(it2))

在这里插入图片描述

4.3、迭代器简单使用

在这里插入图片描述

import collections

lst1 = [1, 2, 3, 4, 5]

# 创建一个迭代器
iter1 = iter(lst1)

# 判断是否是迭代器、可迭代对象
print(isinstance(iter1, collections.Iterator))
print(isinstance(iter1, collections.Iterable))

print(next(iter1))  # 使用next()函数从迭代器中取出第一个对象
print(next(iter1))  # 使用next()函数从迭代器中取出第二个对象
print(next(iter1))
print(next(iter1))
print(next(iter1))
# StopIteration
print(next(iter1))  # 列表中一共有5个元素,当迭代完之后,就不能继续使用next()函数了

注意:
在这里插入图片描述


5、判定操作

在这里插入图片描述

lst1 = [1, 2, 3, 4]

# 判定一个元素是否在一个列表中
print(1 in lst1)

print(11 not in lst1)


6、比较操作

在Python2中可以采用cmp()函数
在这里插入图片描述

在Python3中,支持直接使用比较运算符
在这里插入图片描述

lst1 = [1, 2, 3, 4]
lst2 = [1, 2, 4]

print(lst1 > lst2)  # False


7、排序

7.1、内建函数sorted()

在这里插入图片描述

lst1 = [3, 1, 2, 4]

# 指定Iterable可迭代对象,默认进行排序
lst2 = sorted(lst1)
print(lst2)

lst3 = sorted(lst1, reverse=True)
print(lst3)


def getKey(x):
    return x[1]


lst1 = [('abc', 20), ('acb', 10), ('avcd', 32), ('a', 15)]

# 按照key指定的进行排序 
# key中指定的函数只有一个参数且返回一个值用来进行比较
lst4 = sorted(lst1, key=getKey)
print(lst3)

7.2、方法sort()

在这里插入图片描述

lst1 = [3, 1, 2, 4]

# 方法sort(),会修改原列表,不会返回一个新的列表
lst1.sort()

print(lst1)

注意:
注意区别sorted()函数和方法sort()
函数sorted()针对所有可迭代对象
方法sort()是针对列表特有的方法

7.3、乱序

在这里插入图片描述

import random

lst1 = [1, 2, 3, 4, 5]

random.shuffle(lst1)
print(lst1)


8、反转

在这里插入图片描述

lst1 = [1, 2, 3, 4, 5]
lst2 = [1, 2, 3, 4, 5]

# reverse()方法修改了原列表
lst1.reverse()
print(lst1)

# 切片操作会返回一个新的列表对象
lst3 = lst2[::-1]
print(lst3)

😁😁😁觉得对自己有帮助的小伙伴可以点个赞哦😁😁😁

👉👉👉有误的地方也可以在评论区讨论哦👈👈👈


往期推荐
🚀🚀🚀全网最全Python系列教程(非常详细)—数值篇讲解(学Python入门必收藏)🚀🚀🚀

🚀🚀🚀全网最全Python系列教程(非常详细)—字符串讲解(学Python入门必收藏)🚀🚀🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值