- for循环
Python根据缩进来判断代码行与前一个代码行的关系。在for循环中,利用缩进表示代码块。for语句末尾的冒号告诉Python,下一行是循环的第一行。
bicycles = ['trek','cannondale','redline','specialized']
for bicycle in bicycles:
print(bicycle)
输出:
trek
cannondale
redline
specialized
在for循环后,没有缩进的代码都只执行一次,不会重复执行。
- range()函数
生成一系列数,左闭右开,可用于for循环或者产生可迭代结构,如列表,调用有以下两种:
range(stop:int), 从0产生一些列整数,到stop的前一个值处停止。
range(start:int, stop:int, step:int), 从start开始,以step为步长,到stop的前一个数停止。如果步长太长,最后一个输出的数也绝不会超过stop的前一个数,如下面代码示例。
numbers = list(range(3)) # range(stop:int) print(numbers) enven_numbers = list(range(2,11,2)) #range(start:int, stop:int, step:int) all_numbers = list(range(1,11,5)) print(enven_numbers) print(all_numbers) 输出: [0, 1, 2] [2, 4, 6, 8, 10] [1, 6]
- 对数字列表执行简单的统计计算
- min(iterable) : 取最小值
- max (iterable) :取最大值
- sum (iterable) : 取总和
digits = [1,2,3,4,5,6,7,8,9,0]
mi = min(digits)
ma = max(digits)
su = sum(digits)
print(f"mi = {mi}, ma = {ma}, su = {su}")
输出:
mi = 0, ma = 9, su = 45
- 列表解析
有时候我们需要创建复杂列表,如下面例子中的平方数列表,利用for循环有时显得不够简洁,列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。
#例一 squares = [value**2 for value in range(1,11)] print(squares) #例二 fruits = ['apple', 'banana', 'watermelon'] upper_fruits = [fruit.title() for fruit in fruits] #后半部分和for语句的开头完全相同 print(upper_fruits) 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ['Apple', 'Banana', 'Watermelon']
- 使用列表的一部分——切片
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。两个索引之间用冒号隔开。与函数range()一样,Python在到达第二个索引之前的元素后停止。由于是左闭右开,用第二个索引值减去第一个索引值,得到的结果就是这个切片包含的元素数量。
item = list(range(0,10,1)) print(item) cut_item = item[1:6] #取索引为1处(即第二个元素)到索引为5处(左闭右开)元素 print(cut_item) 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 2, 3, 4, 5]
如果没有指定第一个索引,Python将自动从列表开头开始。如果没有指定第二个索引,切片将终止于列表末尾。在给末尾元素切片时,可使用负数索引。
可以在两个索引之后添加第三个参数作为步长,它可以告诉Python在指定范围内每隔多少个元素提取一个。
item = list(range(0,10,1)) print(item) head_cut = item[:3] #不设置第一个索引 print(head_cut,"-------------------item[:3]") tail_cut = item[4:] #不设置第二个索引 print(tail_cut,"--------------------item[4:]") tail_cut2 = item[-3:] #使用负数索引 print(tail_cut2,"--------------------item[-3:]") step_cut = item[1:8:2] #设置切片步长 no_step_cut = item[1:8] #不设置切片步长 print(no_step_cut,"-------------------item[1:8]") print(step_cut,"---------------------item[1:8:2]") 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2] -------------------item[:3] [4, 5, 6, 7, 8, 9] --------------------item[4:] [7, 8, 9] --------------------item[-3:] [1, 2, 3, 4, 5, 6, 7] -------------------item[1:8] [1, 3, 5, 7] ---------------------item[1:8:2]
遍历切片——如果要遍历切片中的部分元素,可以在for循环中使用切片。
item = list(range(0,10,1))
print(item)
for i in item[:4]: #计算前四个数的平方根
print(i**2)
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0
1
4
9
- 复制列表
如果要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引( [:] )。这样Python就创建了一个起始于第一个元素、终止于最后一个元素的切片,即整个列表的副本。
值得一提的是,如果我们将一个列表直接赋值给另一个列表,两个列表会指向同一个内存空间,当改变其中一个的值时,另一个列表的值也会被改变。如果像前面所述利用切片创建复制,得到的新列表会指向另外的空间,对任何一个列表的操作不会出现在另一个列表中。
item = list(range(0,10,1))
print(item)
print("切片复制测试:")
copy_item = item[:]
print(copy_item)
copy_item.append(666) #只有copy_item会在末尾插入666
print(item)
print(copy_item)
print("直接赋值测试:")
assignment_item = item
print(assignment_item)
assignment_item.append(666) #两个列表会同时在末尾插入666
print(item)
print(assignment_item)
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
切片复制测试:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 666]
直接赋值测试:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 666]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 666]
- 元组
列表——可修改,适合用于存储在程序运行期间可能变化的数据集。
元组——不可修改,即元组的值不可变,用于存储不希望被修改的元素。
元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组之后,就可使用索引来访问元素,就像访问列表元素一样。
严格的说,元组是由逗号标识的,圆括号知识让元组看起来更整洁、清晰。如果要定义只包含一个元素的元组,必须在这个元祖后面加上逗号。创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。
元组的定义:
item = tuple(range(1,10,2)) #可以使用range函数创建元组 print(item) item2 = (1,2) #可以直接定义元组 print(item2) item3 = (3,) #创建只有一个元素的元组 print(item3) 输出: (1, 3, 5, 7, 9) (1, 2) (3,)
可以像遍历列表一样使用for循环遍历元组
item = tuple(range(1,10,2))
print(item)
for i in item:
print(i**2)
输出:
(1, 3, 5, 7, 9)
1
9
25
49
81
虽然不能修改远足的额元素,但是可以给存储元组的变量复制,即不能对元组的元素进行修改,但是可以重新定义整个元组。
item = (1,2) print(item) item = (9,10) print(item) 输出: (1, 2) (9, 10)
试图修改元组元素时,会报错:
item = (1,2) print(item) item[0] = 6 错误提示: Traceback (most recent call last): File "/Users/liheng/documents/CODES/Python/test.py", line 4, initem[0] = 6 TypeError: 'tuple' object does not support item assignment
总而言之,元组是比列表更简单的数据结构,如果需要存储的一组值在程序的整个生命周期内都不变,就可以使用元组。



