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

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

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

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

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

文章目录

  • 1、列表概念
  • 2、列表定义
    • 2.1、直接定义
    • 2.2、列表生成式
    • 2.3、列表推导式
  • 3、常用操作
    • 3.1、增
      • 3.1.1、append
      • 3.1.2、insert
      • 3.1.3 extend
      • 3.1.4 、乘法和加法运算
    • 3.2、删
      • 3.2.1、del语句
      • 3.2.2、pop
      • 3.2.2、remove
    • 3.3、改
    • 3.4、查
      • 3.4.1、获取单个元素
      • 3.4.2、index()
      • 3.4.3、count()
      • 3.4.4、获取多个元素
      • 3.4.5、遍历操作
        • 3.4.5.1、根据元素进行遍历
        • 3.4.5.2、根据索引进行遍历
        • 3.4.5.3、创建枚举对象
        • 3.4.5.4、使用迭代器进行遍历
  • 4、迭代器
    • 4.1、迭代器是什么
      • 4.1.1、迭代
      • 4.1.2、可迭代对象
      • 4.1.3、迭代器
    • 4.2、迭代器意义
    • 4.3、迭代器简单使用
  • 5、判定操作
  • 6、比较操作
  • 7、排序
    • 7.1、内建函数sorted()
    • 7.2、方法sort()
    • 7.3、乱序
  • 8、反转

1、列表概念

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

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

这里有一个非常非常非常重要的概念就是可变与不可变,在Python中可变与不可变如何体现?
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第3张图片

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

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

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


2、列表定义

2.1、直接定义

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

lst1 = [10, 20, 30]

在这里插入图片描述

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

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

注意和C语言中数组的区别:
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第6张图片
C语言的数组是存放相同数据类型的
Python的列表可以存放不同的数据类型

2.2、列表生成式

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

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

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

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

为什么在Python3中,range()不直接生成一个列表?
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第9张图片

2.3、列表推导式

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

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

# 假设现在有一个需求,需要创建一个列表,里面全部是一个列表中数据的平方
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)

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

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

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

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

当然,也可以从少到多

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]

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


3、常用操作

3.1、增

3.1.1、append

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

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

lst1.append(100)
print(lst1)

3.1.2、insert

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

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

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

3.1.3 extend

全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第18张图片
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第19张图片

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 、乘法和加法运算

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

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'

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

3.2、删

3.2.1、del语句

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

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

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

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

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

3.2.2、remove

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

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]

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

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、获取单个元素

在这里插入图片描述

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

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

注意:索引越界问题
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第27张图片

3.4.2、index()

在这里插入图片描述

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

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()

在这里插入图片描述

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

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


print(lst1.count(2))

3.4.4、获取多个元素

在这里插入图片描述

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

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)

注意:

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

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

改进:

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、创建枚举对象

全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第33张图片
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第34张图片

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

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

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

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

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、迭代

全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第37张图片
迭代可以简单理解为遍历

4.1.2、可迭代对象

在这里插入图片描述

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

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

for val in lst1:
    print(val)

全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第38张图片
也可以使用一个库,判定一个对象是否为可迭代对象

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、迭代器

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

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

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

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

4.2、迭代器意义

1.仅仅在迭代到某个元素的时候,才处理该元素
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第41张图片

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

  1. 提供了一个统一的访问集合的接口
    全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第42张图片
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))

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

4.3、迭代器简单使用

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

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()函数了

注意:
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第45张图片


5、判定操作

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

lst1 = [1, 2, 3, 4]

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

print(11 not in lst1)


6、比较操作

在Python2中可以采用cmp()函数
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第47张图片

在Python3中,支持直接使用比较运算符
全网最全Python系列教程(非常详细)---列表讲解(学Python入门必收藏)_第48张图片

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

print(lst1 > lst2)  # False


7、排序

7.1、内建函数sorted()

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

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()

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

lst1 = [3, 1, 2, 4]

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

print(lst1)

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

7.3、乱序

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

import random

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

random.shuffle(lst1)
print(lst1)


8、反转

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

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入门必收藏)

你可能感兴趣的:(带你走进Python的世界,python,开发语言,人工智能,windows)