day 4 列表

本文详细介绍了Python列表的常见操作,包括切片、增(append、extend、insert)、删(remove、pop、clear)、改(直接赋值、切片赋值)、查(count、index)、创建二维数组以及列表的拷贝(浅拷贝与深拷贝)。同时,还探讨了列表推导式的使用,展示了如何高效地操作和构建列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

切片

创建二维数组

 拷贝

列表推导式


  • 切片

将原先的单个索引值改成一个范围即可实现切片:

>>> list = [1,2,4,6,7,8,9,'你好,python'] ##创建列表
>>> 
>>> print(list)
[1, 2, 4, 6, 7, 8, 9, '你好,python']
 
##顺序查看列表
>>> for each in list:
	print(each)
 
	
1
2
4
6
7
8
9
你好,python
 
##利用下标索引访问列表值
>>> list[1]
2
 
>>> list[::]
[1, 2, 4, 6, 7, 8, 9, '你好,python']
##以跨度为2访问
>>> list[::2]
[1, 4, 7, 9]
>>> 

append():它的功能是在列表的末尾添加一个指定的元素;

>>> shiren = ['李白','杜甫','李商隐','白居易','王维']
>>> shiren
['李白', '杜甫', '李商隐', '白居易', '王维']
>>> 
>>> shiren.append('杜牧')
>>> shiren
['李白', '杜甫', '李商隐', '白居易', '王维', '杜牧']
>>> 

extend() :允许一次性添加多个元素;

注:extend() 方法的参数必须是一个可迭代对象,然后新的内容是追加到原列表最后一个元素的后面;

>>> shiren.extend(['李贺','刘禹锡','王昌龄'])
>>> shiren
['李白', '杜甫', '李商隐', '白居易', '王维', '杜牧', '李贺', '刘禹锡', '王昌龄']

*切片也可以实现列表元素的添加:

>>> num = [1,3,4,5,6,7]
>>> num
[1, 3, 4, 5, 6, 7]
>>> num[len(num):] = [2] ##相当于append()
>>> num
[1, 3, 4, 5, 6, 7, 2]
>>> 
>>> num[len(num):] = [8,9,10] ##相当于extend()
>>> num
[1, 3, 4, 5, 6, 7, 2, 8, 9, 10]
>>> 

insert() :允许你在列表的任意位置添加数据;
insert() 方法有两个参数,第一个参数指定的是插入的位置,第二个参数指定的是插入的元素;

>>> nums = [1,3,4,5]
>>> nums.insert(1,2)
>>> nums
[1, 2, 3, 4, 5]
>>> 

remove() :可以将列表中指定的元素删除:

>>> temp = ['鼠','猫','马','龙']
>>> temp
['鼠', '猫', '马', '龙']
>>> temp.remove('猫')
>>> temp
['鼠', '马', '龙']
>>> 

pop() :删除某个指定位置上的元素,它的参数就是元素的下标索引值:

这个参数其实是可选的,如果你没有指定一个参数,那么它“弹”出来的就是最后一个元素:
 

>>> temp.pop(0)
'鼠'
>>> temp
['马', '龙']
>>> 
>>> 
>>> temp.pop()
'龙'
>>> temp
['马']
>>> 

clear() :一步到位清空列表;

>>> temp.clear()
>>> temp
[]
>>> 

列表跟字符串最大区别就是:列表是可变的,而字符串是不可变的;
替换列表中的元素跟访问元素类似,都是使用下标索引的方法,然后使用赋值运算符就可以将新的值给替换进去了:

>>> shirens = ['李白','李商隐','白居易','王维']
>>> shirens
['李白', '李商隐', '白居易', '王维']
>>> 
>>> shirens[3] = '杜甫'
>>> shirens
['李白', '李商隐', '白居易', '杜甫']
>>> 

如果有连续的多个元素需要替换,可以利用切片来实现:

>>> shirens[2:] = ['苏轼','苏辙']
>>> shirens
['李白', '李商隐', '苏轼', '苏辙']
>>> 

count() :查询某元素在 这个列表里面到底有多少个 ;

>>> nums = [1,2,3,2,4,2,4]
>>> nums.count(2)
3
>>> 

index() :查询列表中某元素的索引值;

index() 方法有两个可选的参数 —— start 和 end,就是指定查找的开始和结束的下标位置:

语法:str.index(substring, beg=0, end=len(string))

  • substring -- 指定检索的字符串。
  • beg -- 开始索引,默认为 0。
  • end -- 结束索引,默认为字符串的长度。
>>> nums.index(2) ##当列表中查询的元素存在多个这时候只会查询出第一个
1
>>> nums.index(2,2,5)
3
>>> 
  • 排序与翻转

sort() :还可以实现排序从小到大

reverse():实现翻转

>>> nums = [1,3,4,2,9,7,8]
>>> nums.sort()
>>> nums
[1, 2, 3, 4, 7, 8, 9]
>>> 
>>> nums.reverse()
>>> nums
[9, 8, 7, 4, 3, 2, 1]


##从大到小排序
>>> nums = [2,1,9,4,5,7]
>>>
>>> nums.sort(reverse = 1)
>>> nums
[9, 7, 5, 4, 2, 1]
>>> 
>>> nums.sort(reverse = True)
>>> nums
[9, 7, 5, 4, 2, 1]
>>> 
  • 创建二维数组

###创建一个4行4列的二维数组

>>> A = [0] * 4  ##先创建行
>>> for i in range(4):  ##有几行就迭代几次
	A[i] = [1,2]*2   ##再插入列

	
>>> A
[[1, 2, 1, 2], [1, 2, 1, 2], [1, 2, 1, 2], [1, 2, 1, 2]]
>>> 
  •  拷贝

copy():用于拷贝一个列表;

在嵌套列表中,可以用‘is’ 来检测元素是否储存在同个位置;(因为列表不同于字符串它是可变的所有存储位置不一定相同)

##下面这2种方法效果相同,在 Python 中都称为浅拷贝;
>>> nums
[1, 2, 3, 2, 4, 2, 4]
>>> num_copy1 = nums.copy()
>>> num_copy1
[1, 2, 3, 2, 4, 2, 4]
>>>
>>> nums_copy2 = nums[:]
>>> nums_copy2
[1, 2, 3, 2, 4, 2, 4]
>>> 


###A和B的结果相同但本质不一样,B试图通过*对一个嵌套进行拷贝
​>>> A = [0] * 3
>>> for i in range(3):
	A[i] = [0] * 3

	
>>> A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> 
>>> B = [[0] * 3] * 3
>>> B
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> A[0] is A[1]
False
>>> A[0] is A[2]
False
>>> A[1] is A[2]
False
>>> B[0] is B[1]
True
>>> B[0] is B[2]
True
>>> A [1][1] =1
>>> A
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
>>> B [1][1] =1
>>> B
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
>>> 

##浅拷贝对于嵌套列表的拷贝,只能拷贝第一层数据,其余仅拷贝其引用:
>>> x = [[1,2,3],[4,5,6],[7,8,9]]
>>> y = x.copy()
>>> y
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> 


##调用模块copy实现浅拷贝和深拷贝

>>> import copy
>>> x = [[1,2,3],[4,5,6],[7,8,9]]
>>> y = copy.copy(x)
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> 
>>> x = [[1,2,3],[4,5,6],[7,8,9]]
>>> y = copy.deepcopy(x)
>>> x[1][1] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]
>>> y
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> 

  • 列表推导式

语法:[expression for target in iterable]

##将列表值变为原来的2倍
##推导式
>>> A = [1,2,3,4]
>>> A = [i*2 for i in A]
>>> A
[2, 4, 6, 8]
>>>
##for循环
>>> A = [1,2,3,4]
>>> for i in range(len(A)):
	A[i] = A[i] *2

	
>>> A
[2, 4, 6, 8]
>>> 


###提取矩阵中的数
>>> A = [[1,2,3],
         [4,5,6],
         [7,8,9]]

##提取列的元素
>>> result = [i[0] for i in A]
>>> result
[1, 4, 7]
>>> 
##提取正对角线元素
>>> dia = [A[i][i] for i in range(len(A))]
>>> dia
[1, 5, 9]
>>> 
##提取反对角线元素,根据反向索引值来构造表达式
>>> dia = [A[i][-i-1] for i in range(len(A))]
>>> dia
[3, 5, 7]
>>> 


##推导式建立矩阵
>>> A = [[0]*3 for i in range(3)]
>>> A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> 

##多层嵌套的列表推导式

[expression for target1 in iterable1
            for target2 in iterable2
            ...
            for targetN in iterableN]

[expression for target1 in iterable1 if condition1
            for target2 in iterable2 if condition2
            ...
            for targetN in iterableN if conditionN]


>>> _ = [x+y for x in 'abc' for y in 'abd']
>>> _
['aa', 'ab', 'ad', 'ba', 'bb', 'bd', 'ca', 'cb', 'cd'] ###笛卡尔积


>>> _ = [[x,y] for x in range(10) if x%2 == 0 for y in range(10) if y%3 == 0]
>>> _
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]
>>> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值