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

9419

被折叠的 条评论
为什么被折叠?



