隐藏

Python列表(list)详解

发布:2023/10/22 21:51:02作者:管理员 来源:本站 浏览次数:483

目录


           1.python序列详解

               序列索引

               序列切片

               序列相加

               序列相乘

               检查元素是否在序列中

               和序列相关的内置函数

           2. Python列表(list)详解

               列表的创建

               列表元素访问

               删除列表

               向列表list中添加元素

               删除列表list中的元素

               修改列表list中的元素

               查找列表中的元素


1.python序列详解


序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可以通过每个值所在的位置编号(即索引)进行访问。

Python中字符串、列表、元组、字典、集合都是序列,列表和元组中的数据是有序的,可以通过索引访问;而字典和集合是无序的,它们不支持索引、切片、相加、相乘操作。

序列索引


序列中每个元素都有自己的位置编号(索引),从起始元素开始,索引从0开始递增。

在这里插入图片描述

Python中支持负数索引,此时,从末尾元素开始,索引从-1开始计数,从右往左依次递减。

在这里插入图片描述

序列切片


切片是Python中访问序列的一种方法,他的语法格式为:

sequence[start : end : step]

其中,sequence表示序列名称;start表示想要访问的值的起始位置索引(包含该位置);end表示切片的结束位置索引(不包含该位置),不指定则默认为序列长度;step表示切片步长,不指定则默认步长为1,第二个冒号可省略。

例如:


str1 = "我爱学Python"

print(str1[:2])

print(str1[1:4:2])

print(str1[-1:])

print(str1[::-1])


 


运行结果为:


   我爱

   爱P

   n

   nohtyP学爱我


序列相加


Python中,支持两种类型相同的序列使用“+”进行相加操作,即将两个序列的元素连接。

类型相同,指的是“+”运算符的两侧序列要么都是列表类型,要么都是元组类型,要么都是字符串。


str1 = "我爱学Python"

str2 = "好好学习天天向上"

print(str1 + str2)


list1 = [1, 2, 3, 4]

list2 = [3, 4, 5, 6]

print(list1 + list2)


 


运行结果:


   我爱学Python好好学习天天向上

   [1, 2, 3, 4, 3, 4, 5, 6]


序列相乘


Python中,将序列和数字n相乘,会得到一个新序列,新序列内容和n个原序列相加结果相同。


str1 = "我爱学Python"

print(str1 * 3)

print(str1 + str1 + str1)


list1 = [1, 2, 3, 4]

print(list1 * 2)

print(list1 + list1)


  


运行结果如下:


   我爱学Python我爱学Python我爱学Python

   我爱学Python我爱学Python我爱学Python

   [1, 2, 3, 4, 1, 2, 3, 4]

   [1, 2, 3, 4, 1, 2, 3, 4]


列表可以通过乘法运算,实现列表初始化:


dp = [1] * 10

print(dp)


 


结果如下,表示将列表dp初始化为:长度为10,且每个元素都是1的列表。


   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]


检查元素是否在序列中


Python中,可以使用关键字 in 来检查元素是否在序列中,语法格式:

value in sequence 。其中,value 表示要检查的元素,sequence 表示指定的序列,返回True或False。

例如:


str1 = "我爱学Python"

print('P' in str1)


list1 = [1, 2, 3, 4]

print(5 in list1)


  


结果如下:


   True

   False


和序列相关的内置函数

函数 功能

len() 计算序列的长度,即返回序列中元素的个数

max() 返回序列中元素的最大值

min() 返回序列中元素的最小值

sum() 计算序列中元素的和,使用该函数时,序列中元素必须都是数字,不能是字符或字符串,否则会报错。因为Python解释器无法判断‘+’是要做求和运算还是序列连接操作

list() 将序列转化为列表

str() 将序列转化为字符串

tuple 将序列转化为元组

sorted 对序列中元素进行排序

reversed() 将序列中的元素反向,不会改变原序列顺序,而是指向一个新的地址,如原序列list1,可通过q = list(reversed(list1)),得到一个元素顺序与原序列list1相反的新序列q

enumerate() 将序列索引和序列元素组合成元组,形成一个新序列


举例:


str1 = "我爱学Python"

list1 = [1, 5, 3, 4]


print(len(str1))

print(max(list1))

print(min(list1))

print(sum(list1))

print(sorted(list1))

q = list(reversed(list1))

print(q)

print(list(enumerate(list1)))


 


运行结果如下:


   9

   5

   1

   13

   [1, 3, 4, 5]

   [4, 3, 5, 1]

   [(0, 1), (1, 5), (2, 3), (3, 4)]


2. Python列表(list)详解


Python中,列表将元素放在[ ]中,使用 ‘,’ 将元素隔开:

[element1,element2,…,elementn],其中element1~elementn表示列表中的元素,它没有个数限制,它可以是python中支持的任何数据类型。

列表的创建


# 使用[ ]创建

# 语法格式 listname = [element1, element2, ..., elementn]

list1 = []  # 创建空列表

list2 = [1, 2, [2, 3], (2, 4), {1: 3}, {9}, 'python', 1.2]


# 使用list()创建,将其他数据类型转换为list

list3 = list('我爱Python')  # 将字符串转换为list

list4 = list((1, 3, 4))  # 将元组转换为list

list5 = list({1: 3, 2: 4})  # 将字典转换为list, 此时结果为list5 = [1, 2]

list6 = list({1, 2, 35, 6})  # 将集合转换为list

list7 = list(range(1, 10))  # 将1到9的区间转化为list

list8 = list()  # 创建空列表




依次打印结果如下:


   []

   [1, 2, [2, 3], (2, 4), {1: 3}, {9}, ‘python’, 1.2]

   [‘我’, ‘爱’, ‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’]

   [1, 3, 4]

   [1, 2]

   [1, 2, 35, 6]

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

   []


列表元素访问


前面提到列表是序列的一种,我们可以通过索引访问列表元素,也可以通过切片的方式访问,列表可以相加,也可以和数字相乘。


# 列表元素数访问

# 访问方式1:listname[index]

list1 = ['a','b','c',"f"]

print(list1[0])

print(list1[-1])

# 访问方式2:listname[start:end:step]

print(list1[0:2])

print(list1[1:])

print(list1[-1:])

print(list1[::2])

print(list1[::-1])


 


打印结果如下:


   a

   f

   [‘a’, ‘b’]

   [‘b’, ‘c’, ‘f’]

   [‘f’]

   [‘a’, ‘c’]

   [‘f’, ‘c’, ‘b’, ‘a’]


删除列表


对于不再使用的元素,可以进行删除:del listname


list1 = ['a', 'b', 'c', "f"]

del list1

print(list1)


 


删除后不能再使用,报错如下:


   Traceback (most recent call last):

   File “D:\pythonProjects\section\test.py”, line 5, in < module>

   print(list1)

   NameError: name ‘list1’ is not defined


向列表list中添加元素


Python中有几种专门的方法用来向列表中添加元素:append()函数、extend()函数和insert()函数。


# 向列表中添加元素

# 方式1:append()

list1 = ['a', 'b', 'c', "f"]

list2 = ['我爱Python', '你呢']

list1.append(1)  # 追加单个元素

list1.append(list2)  # 追加列表,同理还可追加元组,集合,字典

list1.append((1, 2))

list1.append({51, 'ds'})

list1.append({1: 3, 4: 3})

print(list1)


# 方式2:extend()

# list2.extend(1) 此时会报错 TypeError: 'int' object is not iterable

# append() 和extend()的区别在于 :

# 1.append()可以传入Python支持的任一对象;extend()只能传入序列

# 2.append()将传入对象视为一个整体;extend()不会把列表或元组视为一个整体,而是把它们包含的元素逐个添加到列表中

list2.extend([2, 3, 4])

list2.extend(('今天天气不错', 2))

print(list2)


# 方式3:insert()

# append() 和extend()只能在列表末尾追加,insert()可以在列表中任意位置插入元素,并将插入元素视为一个整体

# listname.insert(index,obj)

list3 = ['你好', 'Python', 1, 2, 3]

list3.insert(0, 'hello')

list3.insert(1, [0, 1])

print(list3)


 


运行结果如下:


   [‘a’, ‘b’, ‘c’, ‘f’, 1, [‘我爱Python’, ‘你呢’], (1, 2), {‘ds’, 51}, {1: 3, 4: 3}]

   [‘我爱Python’, ‘你呢’, 2, 3, 4, ‘今天天气不错’, 2]

   [‘hello’, [0, 1], ‘你好’, ‘Python’, 1, 2, 3]


删除列表list中的元素


Python提供了4种删除列表中元素的方法:del、pop()、remove()、clear()


#  删除列表中的元素

# 方式1:del 根据索引值删除元素

# 格式1:del listname[index]

# 格式2:del listname[start:end:step]

list1 = [1, 2, 3, 34, 5, 6]

del list1[0]

print(list1)

del list1[1:4:2]

print(list1)


# 方式2:pop() 根据索引值删除元素

# 格式:listname.pop(index)

# 如果不写index,默认删除列表最后一个元素

list2 = [1, 2, 3, 4, 5, 6, 9, 7, 75]

list2.pop(0)

print(list2)

list2.pop(-1)

print(list2)

list2.pop()

print(list2)


# 方式3:remove() 根据元素值删除元素

# 格式: listname.remove(value)

# remove()方法只会删除第一个和value相等的元素,

# 而且列表中必须存在该元素,否则会报 ValueError: list.remove(x): x not in list

# 所以使用remove()前,最好先进行判断

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

list3.remove(1)

print(list3)

if 10 in list3:

   list3.remove(10)

   print(list3)

else:

   print('10不在list3中')


# 方式4:clear() 将列表中元素全部删除

# 格式: listname.clear()

list4 = [2, 34, 5, 6, 6]

list4.clear()

print(list4)


 


运行结果如下:


   [2, 3, 34, 5, 6]

   [2, 34, 6]

   [2, 3, 4, 5, 6, 9, 7, 75]

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

   [2, 3, 4, 5, 6, 9]

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

   10不在list3中

   []


修改列表list中的元素


Python中可以使用索引和切片两种方式来对列表元素进行修改。


# 修改列表中的元素

# 方式1:listname[index] = value

list1 = [22, 33, 4, 4, 5, 6, 1]

list1[0] = 'ds'

print(list1)


# 方式2:listname[start:end:step] = [value1,..]

list2 = [2, 3, 3, 4, 5, 6, 77, 78, 98, 3]

list2[0:4] = ['p', 'y', 't', 'h', 'd', 'jian']

# 不指定步长时,若传入的列表长度大于切片长度,则会在切片后添加列表其余元素

print(list2)

# 指定步长时,要求传入列表元素个数与切片元素个数相等

# 否则报错 ValueError: attempt to assign sequence of size 4 to extended slice of size 3

list2[6::2] = ["a", 'b', 'c']

print(list2)


 


查找列表中的元素


# 检查列表中的元素

# 1.index()方法,返回元素在列表中的索引(如果元素存在列表中,否则报错)

#  格式:listname.index(obj,start,end),

#  start和end可以省略,默认返回列表中第一次出现的位置索引

list1 = [1, 2, 3, 4, 5, 6, 63, 2, 2, 6]

print(list1.index(2))

print(list1.index(2, 7, 9))


# 2.count()方法

#  格式:listname.count(obj)

#  返回 obj在列表中的个数

print(list1.count(2))

#  如果元素不在列表中,则返回0

print(list1.count('s'))


 


运行结果如下:


   1

   7

   3

   0