Python笔记:列表

目录

列表的索引:

单个:

列表切片(对部分索引):

列表的诸多方法(增删改查):

增:

删:

改:

查:

列表的加法与减法:

嵌套列表:

深拷贝: 

列表推导式:

列表推导式添加一个用于筛选的if分句 :


Python有6个内置的基本数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典),列表可以是最常见的数据类型。列表的数据项不需要具有相同的类型。

列表的索引:

单个:

rhyme = [1,2,3,4,5,"上山打老虎"]
print(rhyme)

[1, 2, 3, 4, 5, '上山打老虎']

>>> rhyme[0]
1

>>> rhyme[1]
2

>>> rhyme[5]
'上山打老虎'
#若列表过长时,索引该列表的最后一个元素,计算总长度
length = len(rhyme)
rhyme[length - 1]
'上山打老虎'

#用下标索引
rhyme[-1]
'上山打老虎'

#元素和列表的关系
元素  1    2   3   4   5  '上山打老虎’

下标 -6   -5  -4  -3  -2         -1 

列表切片(对部分索引):

rhyme[0:3]
[1, 2, 3]

rhyme[3:6]
[4, 5, '上山打老虎']

rhyme[:3]
[1, 2, 3]

rhyme[:]
[1, 2, 3, 4, 5, '上山打老虎']

rhyme[0:5:2]
[1, 3, 5]

rhyme[::-2]
['上山打老虎', 4, 2]

rhyme[::-1]
['上山打老虎', 5, 4, 3, 2, 1]

列表的诸多方法(增删改查):

增:

append():在列表的末尾添加一个指定的元素(每次只添加一个)

heros = ["钢铁侠","绿巨人"]
heros.append("黑寡妇")

heros
['钢铁侠', '绿巨人', '黑寡妇']

extend():参加的参数为可迭代对象,新的内容追加到原列表的最后一个元素的后面

heros=["钢铁侠","绿巨人","黑寡妇"]
heros.extend(["鹰眼","灭霸","雷神"])

heros
['钢铁侠', '绿巨人', '黑寡妇', '鹰眼', '灭霸', '雷神']

用列表的长度添加元素:

s = [1, 2, 3, 4, 5]
s[len(s):] = [6]

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

s[len(s):] = [7, 8, 9]

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

insert():在列表的任意位置添加数据

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

s.insert(0,0)
s = [0, 1, 2, 3, 4, 5]

s.insert(len(s), 6)
s = [0, 1, 2, 3, 4, 5, 6]

删:

remove():删除指定的元素。需注意若列表中存在多个匹配的元素,只会删除第一个,且当指定元素不存在时,程序会报错;

heros = ['钢铁侠', '绿巨人', '黑寡妇', '鹰眼', '灭霸', '雷神']
heros.remove("灭霸")

heros
['钢铁侠', '绿巨人', '黑寡妇', '鹰眼', '雷神']

pop():删除某个位置上的元素,其参数即为元素的下标索引值。

heros.pop(2)
'黑寡妇'

heros
['钢铁侠', '绿巨人', '鹰眼', '雷神']

clear():清空元素所有值。

heros.clear()

heros
[]

改:

元素序号直接替换:

heros = ['蜘蛛侠', '绿巨人', '黑寡妇', '鹰眼', '灭霸', '雷神']
heros[4] = "钢铁侠"

heros
['蜘蛛侠', '绿巨人', '黑寡妇', '鹰眼', '钢铁侠', '雷神']

heros[3:] = ["武松","林冲","李逵"]

heros
['蜘蛛侠', '绿巨人', '黑寡妇', '武松', '林冲', '李逵']

sort():实现排序功能

num = [3, 1, 3, 9, 8, 3, 5]
num.sort()

num
[1, 3, 3, 3, 5, 8, 9]

reverse():将元素反转互换(其中第一个与最后一个,第二个与倒数第二个等等)

num = [1, 3, 3, 3, 5, 8, 9]
num.reverse()  

num
[9, 8, 5, 3, 3, 3, 1]

heros.reverse()

heros
['李逵', '林冲', '武松', '黑寡妇', '绿巨人', '蜘蛛侠']

Sort函数参数默认状态中reverse = False,此时为正向排序不反转

nums = [3, 1, 3, 9, 8, 3, 5]
#此时将reverse值改为True,元素正向排列且反转
nums.sort(reverse = True)

nums
[9, 8, 5, 3, 3, 3, 1]

查:

count():计数

nums = [9, 8, 5, 3, 3, 3, 1]

nums.count(3)
3

 index():用于从列表中找出某个值第一个匹配项的索引位置。

index(x,start,end),寻找start到end之间匹配项的索引位置

heros = ['李逵', '林冲', '武松', '黑寡妇', '绿巨人', '蜘蛛侠']
heros.index("绿巨人")

4
#即heros[4] = "神奇女侠"
heros[heros.index("绿巨人")] = "神奇女侠"
heros

['李逵', '林冲', '武松', '黑寡妇', '神奇女侠', '蜘蛛侠']

nums = [3, 1, 3, 9, 8, 3, 5]
nums.index(3)

0

nums.index(3,1,6)

2

copy():拷贝列表

nums_copy1 = nums.copy()

nums_copy1
[3, 1, 3, 9, 8, 3, 5]

#列表切片拷贝
nums_copy2 = nums[:]

>>> nums_copy2
[3, 1, 3, 9, 8, 3, 5]

注:以上两种方法均为Shallow copy即浅拷贝

列表的加法与减法:

加法:将两个列表的元素放到新列表中

乘法:将列表内的元素重复n次

a = [1, 2, 3]
b = [4, 5, 6]

a + b
[1, 2, 3, 4, 5, 6]

a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

嵌套列表:

matrix() :矩阵

matrix = [[1, 2, 3], [4, 5, 6],[7, 8, 9]]
#下面的表示方法更清晰
matrix = [[1, 2, 3],
	      [4, 5, 6],
	      [7, 8, 9]]
matrix

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

#输出矩阵中的每个值
for i in matrix:
	for each in i:
		print(each)

1
2
3
4
5
6
7
8
9

for i in matrix:
	for each in i:
		print(each,end=" ")
	print()
	
1 2 3 
4 5 6 
7 8 9 

matrix()的索引:

matrix[0]
[1, 2, 3]

matrix[0][0]
1

matrix[2][2]
9

创建嵌套矩阵:

A=[0] * 3
A

[0, 0, 0]

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]]

【补充知识】 is:同一性运算符,用于检验两个变量是否指向同一个对象。

x = "Python"
y = "Python"
x is y

True

x = [1, 2, 3]
y = [1, 2, 3]
x is y

False

寻找原因:

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]]


>>> A[0] is A[1]
False
>>> A[1] is A[2]
False
>>> B[0] is B[1]
True
>>> B[1] is B[2]
True

 B试图用一个乘号对一个嵌套列表进行拷贝,但拷贝的只是对同一个列表的引用;

 

 

深拷贝: 

关于浅拷贝方法区别的解释:

第一种:y随x改变而改变;对列表的引用。

x = [1, 2, 3]
y = x
x[1] = 1
x

[1, 1, 3]

y
[1, 1, 3]

 

 

第二种:y不随x改变而改变;拷贝的是整个列表对象。

x = [1, 2, 3]
y = x.copy()
x[1] = 1
x

[1, 1, 3]

y

[1, 2, 3]

多层嵌套的深拷贝:

调用copy模块
import copy
x = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
#引用copy模块的deepcopy函数实现深拷贝
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]]

  deepcopy函数将原对象拷贝的同时也将对象中所有引用的子对象进行了拷贝。

列表推导式:

假设将列表中的每个元素均乘以2,怎么实现?

for循环方法:

oho = [1, 2, 3, 4, 5]
for i in range(len(oho)):
	oho[i] =  oho[i] *2	
oho

[2, 4, 6, 8, 10]

 列表表达式方法:

表达式的形式:[Expression(循环体) for Target in iterable]

循环体决定了输出的结果;Target为iterablede赋值对象

oho = [1, 2, 3, 4, 5]
for i in range(len(oho)):
	oho[i] =  oho[i] *2

oho
[2, 4, 6, 8, 10]

两种方法实现列表的赋值 

oho = [1, 2, 3, 4, 5]
x =[i for i in range(10)]
x

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

x= []
>>> for i in range(10):
	x.append(i)
x

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

 列表表达式的方法实现:

y = [c * 2 for c in "Python"]
y

['PP', 'yy', 'tt', 'hh', 'oo', 'nn']

ord内置函数:即将单个字符串转换为对应的Unicode编码;

code = [ord(p) for p in "Python"]
code

[80, 121, 116, 104, 111, 110]

 列表表达式实现:输出嵌套数组的某一列元素/主对角线元素

martix = [[1, 2, 3],
	      [4, 5, 6],
	      [7, 8, 9]]
col2 = [row[1] for row in matrix]
col2

[2, 5, 8]

diag = [martix[i][i] for i in range(len(martix))]
diag

[1, 5, 9]

 列表表达式实现:创建嵌套矩阵,且解决了浅拷贝的问题

#输出3次[0]*3
S = [[0] * 3 for i in range(3)]
S

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

S[1][1] = 1
S

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

列表推导式添加一个用于筛选的if分句 :

形式:[epxression for target in iterable if condition]

执行顺序:for循坏里面 > if条件判断 > 表达式

even = [i for i in range(10) if i % 2 == 0]
even

[0, 2, 4, 6, 8]

 寻找首字母为F的单词

words = ["Great",'Python',"Brilliant","Excellent","Fantastic"]
fword = [i for i in words if i[0] == "F"]
fword

['Fantastic']

 列表推导式的嵌套:

[expression for target1 in iterable1

                    for target2 in iterable2

                                ………

                    for targetN in iterableN]

举例:

#嵌套列表推导式实现
matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
faltten = [col for row in matrix for col in row]
faltten

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

#for循环实现
faltten = []
for row in matrix:
	for col in row:
		faltten.append(col)
faltten

[1, 2, 3, 4, 5, 6, 7, 8, 9]
#嵌套列表推导式实现
[x + y for x in "python" for y in "PYTHON"]

['pP', 'pY', 'pT', 'pH', 'pO', 'pN', 'yP', 'yY', 'yT', 'yH', 'yO', 'yN', 'tP', 'tY', 'tT', 'tH', 'tO', 'tN', 'hP', 'hY', 'hT', 'hH', 'hO', 'hN', 'oP', 'oY', 'oT', 'oH', 'oO', 'oN', 'nP', 'nY', 'nT', 'nH', 'nO', 'nN']

#for循环实现
_ = []
for x in "python":
	for y in "PYTHON":
		_.append(x + y)
_

['pP', 'pY', 'pT', 'pH', 'pO', 'pN', 'yP', 'yY', 'yT', 'yH', 'yO', 'yN', 'tP', 'tY', 'tT', 'tH', 'tO', 'tN', 'hP', 'hY', 'hT', 'hH', 'hO', 'hN', 'oP', 'oY', 'oT', 'oH', 'oO', 'oN', 'nP', 'nY', 'nT', 'nH', 'nO', 'nN']

 

[expression for target1 in iterable1 if conditio1

                    for target2 in iterable2 if conditio2

                                ………………………

                    for targetN in iterableN if conditioN]

举例:

#嵌套列表推导式实现
[[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]]

#for循环实现
_ = []
 for x in range(10):
	if x % 2 == 0:
		for y in range(10):
			if y % 3 == 0:
				_.append([x,y])

[[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、付费专栏及课程。

余额充值