这篇博客主要涉及“操作列表”的相关知识。
其实熟悉C++11性质的朋友会知道一种容器的遍历方式:
vector<int> v(n);
for(auto &i : v) {
......
}
而在python中,对列表的遍历有着类似的手段:
t = ['1', '2', '3']
for num in t :
print(num, end=" ")
# 1 2 3
关于数值列表的构建:
# range(a, b) range的构建从a开始,并在到达b停止,也就是说,不包括b值本身
for i in range(1, 4) :
print(i, end=" ")
# 1 2 3
但需要注意的是:range函数是生成的一系列数字,而非一个列表
希望将range函数生成的数字序列转化为列表,可以使用函数list()
num = list(range(1, 6))
print(num)
# [1, 2, 3, 4, 5]
而 range() 函数还可以指定步长:
# range(start, stop, step),从start开始,每次增加step,到达stop的时候结束
num = list(range(2, 11, 2))
print(num)
# [2, 4, 6, 8, 10]
有几个相关函数专门对数组列表进行处理:
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(min(digits))
# 1
print(max(digits))
# 9
print(sum(digits))
# 45
列表解析:
s = [val ** 2 for val in range(1, 11)]
print(s)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# tip: 建立一个二维列表可以这么写
list = [[] for _ in range(1, 11)]
# 其中"_"表示python中的占位符,也就是说不再关心循环变量的具体值,只是用来控制循环次数
关于如何使用列表的一部分(切片):
其实切片的索引与range很类似,都可以理解为左闭右开的区间:
t = ['1', '2', '3', '4']
print(t[0:3])
# ['1', '2', '3']
print(t[1:4])
# ['2', '3', '4']
# 如果没有指定第一个索引,则默认从头开始
print(t[:3])
# ['1', '2', '3']
# 同样,可以默认截取到结尾
print(t[2:])
# ['3', '4']
# 这种规则对负的索引形式一样是成立的,如:打印最后三个数
print(t[-3:])
# ['2', '3', '4']
# 基于此,我们得到一种复制列表的方式
s = t[:]
print(s)
# ['1', '2', '3', '4']
注意!
复制列表不可以写成如下形式!
s = t
这在python的语法中表示将 s 关联到 t 的列表,而非创建一个 t 的副本,这样的话,改动 t 中的元素时,s 中的元素也会发生相同的变化
拓展(元组):
可以将元组理解为不可修改的列表,我们用小括号将其与列表的中括号做区分
s = ('1', '2')
print(s[1])
# 2
元组的遍历和切片与列表是类似的
虽然元组的元素不可修改,但其实我们可以给储存元组的变量重新赋值
s = ('1', '2')
print(s)
s = ('A', 'B')
print(s)
"""
('1', '2')
('A', 'B')
"""
基于此,可以与C语言中的 const 进行类似