这篇是关于Python中列表的讲解,涉及到以下内容,欢迎点赞和收藏,你点赞和收藏是我更新的动力
本文将从以下几个方面展开对列表的讲解:
1、列表究竟是一个什么东西?
2、如何去定义一个列表
3、列表常用操作有哪些
4、列表中涉及到迭代器,那么迭代器又是什么?
5、列表还有一些其他操作,该怎么样玩转列表?
回顾字符串,不清楚的朋友,可以查看我的字符串篇
全网最全Python系列教程(非常详细)—字符串讲解(学Python入门必收藏)
字符就是一个一个字符组合起来的
字符是一个有序的不可变序列
这里有一个非常非常非常重要的概念就是可变与不可变,在Python中可变与不可变如何体现?
str1 = 'python'
lst1 = [1, 2, 3]
print(id(lst1)) # 2554276364616
# 我们没有办法修改str1中的数据,只能改变整个字符串
# 所以字符串是一个不可变数据类型
# 对列表进行改变后,列表的id没有发生变化,这就是一个可变数据类型
lst1.append(10)
print(id(lst1)) # 2554276364616
lst1 = [10, 20, 30]
lst1 = [10, 20, 30, [1, 2, 3]]
注意和C语言中数组的区别:
C语言的数组是存放相同数据类型的
Python的列表可以存放不同的数据类型
lst1 = range(100)
print(lst1, type(lst1))
lst2 = list(range(100))
print(lst2, type(lst2))
为什么在Python3中,range()不直接生成一个列表?
# 假设现在有一个需求,需要创建一个列表,里面全部是一个列表中数据的平方
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]
lst1 = [1, 2, 3, 4, 5]
lst1.append(100)
print(lst1)
lst1 = [1, 2, 3, 4, 5]
lst1.insert(1, 100)
print(lst1)
lst1 = [1, 2, 3, 4, 5]
lst1.extend('python')
print(lst1)
lst2 = [1, 2, 3, 4, 5]
lst2.extend(lst2)
print(lst2)
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'
lst1 = [1, 2, 3, 4, 5]
# del语句可以删除具体索引位置的值
del lst1[2]
print(lst1) # [1, 2, 4, 5]
# del可以删除一个变量,包括数据和这个变量
del lst1
print(lst1)
lst1 = [1, 2, 3, 4, 5]
# 移除并返回列表中指定索引对应的元素
# 默认返回移除并返回最后一个元素
val1 = lst1.pop()
print(val1)
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]
lst1 = [1, 2, 2, 2, 5, 1, 2, 1, 2]
# 一定要注意索引的越界问题
lst1[100] = 20 # IndexError: list assignment index out of range
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
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))
lst1 = [1, 2, 2, 2, 5, 1, 2, 1, 2]
print(lst1.count(2))
lst1 = [1, 2, 3, 4, 5]
print(lst1[1:4])
print(lst1[::-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
lst1 = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
# 我们只要知道一个列表中存在多少个索引,就可以通过索引访问到该元素
for index_value in range(len(lst1)):
print(index_value, '--->', lst1[index_value])
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)
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)
很多小伙伴肯定不理解上述的迭代器,所以下面一章,我会专门讲解迭代器相关内容,如果不懂,可以查看下一章内容,概念比较多,可以反复看几遍哦
迭代器可以用来访问序列中的元素,本小结主要围绕以下内容对迭代器进行讲解:
1、迭代器究竟是一个什么东西?
2、为什么会需要有迭代器?
3、如何使用迭代器?
4、使用迭代器需要注意哪些内容?
在了解迭代器之前,需要首先知道几个概念:迭代、可迭代对象、迭代器。
如何判定一个可迭代对象?
一个可迭代对象一定可以使用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
import collections
lst1 = [1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5]
print(isinstance(lst1, collections.Iterator))
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))
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()函数了
lst1 = [1, 2, 3, 4]
# 判定一个元素是否在一个列表中
print(1 in lst1)
print(11 not in lst1)
lst1 = [1, 2, 3, 4]
lst2 = [1, 2, 4]
print(lst1 > lst2) # False
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)
lst1 = [3, 1, 2, 4]
# 方法sort(),会修改原列表,不会返回一个新的列表
lst1.sort()
print(lst1)
注意:
注意区别sorted()函数和方法sort()
函数sorted()针对所有可迭代对象
方法sort()是针对列表特有的方法
import random
lst1 = [1, 2, 3, 4, 5]
random.shuffle(lst1)
print(lst1)
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入门必收藏)