0x01 遍历整个列表
for循环
代码
names = ["a" , "b" , "c"]
for name in names:
print(name)
定义一个for循环,从列表names取出一个名字储存在变量name中,然后打印出来,注意冒号和缩进。
练习
4-1 比萨:想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用 for 循环将每种比萨的名称都打印出来。
- 修改这个 for 循环,使其打印包含比萨名称的句子,而不仅仅是比萨的名称。对 于每种比萨,都显示一行输出,如“I like pepperoni pizza”。
- 在程序末尾添加一行代码,它不在 for 循环中,指出你有多喜欢比萨。输出应包 含针对每种比萨的消息,还有一个总结性句子,如“I really love pizza!”。
pizzas = ['bujidao', 'burenshi', 'shaziyo']
for pizza in pizzas:
print("I like " + pizza + " pizza!!!")
print("I really don't know much about pizza!!!")
4-2 动物:想出至少三种有共同特征的动物,将这些动物的名称存储在一个列表中, 再使用 for 循环将每种动物的名称都打印出来。
- 修改这个程序,使其针对每种动物都打印一个句子,如“A dog would make a great pet”。
- 在程序末尾添加一行代码,指出这些动物的共同之处,如打印诸如“Any of these animals would make a great pet!”这样的句子。
animals = ["pig", "dog", "cat"]
for animal in animals:
print("A " + animal + " would make a great pet!")
print("Any of these animals would make a great pet!")
0x02 创建数值列表
range()函数
代码
for value in range(1, 5):
print(value)
结果
>>1
>>2
>>3
>>4
注意range()的范围写的是1-5,并不意味着是打印1到5,而是打印1到4。
使用range()与list()创建数字列表
代码
numbers = list(range(1,6))
print(numbers)
结果
>>[1, 2, 3, 4, 5]
range()函数还可以设置步长,代码如下
代码
numbers = list(range(2, 11 , 2))
print(numbers)
结果
>>[2, 4, 6, 8, 10]
对数字列表执行简单的统计计算
代码
digits = [1, 2, 3]
min(digits)
max(digits)
sum(digits)
结果
>> 1
>> 3
>> 6
列表解析
列表解析将for循环和创建新元素的代码合并成一行
代码
squares = [value**2 for value in range(1,11)] # “**”表示次方
print(squares)
结果
>>[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
练习
4-3 数到 20:使用一个 for 循环打印数字 1~20(含)。
for value in range(1, 21):
print(value)
4-4 一百万:创建一个列表,其中包含数字 1~1 000 000,再使用一个 for 循环将这 些数字打印出来(如果输出的时间太长,按 Ctrl + C 停止输出,或关闭输出窗口)。
numbers = list(range(1, 1000001))
for value in numbers:
print(value)
4-5 计算 1~1 000 000 的总和:创建一个列表,其中包含数字 1~1 000 000,再使用 min()和 max()核实该列表确实是从 1 开始,到 1 000 000 结束的。另外,对这个列表调 用函数 sum(),看看 Python 将一百万个数字相加需要多长时间。
numbers = list(range(1, 1000001))
min(numbers)
max(numbers)
sum(numbers)
4-6 奇数:通过给函数 range()指定第三个参数来创建一个列表,其中包含 1~20 的 奇数;再使用一个 for 循环将这些数字都打印出来。
numbers = list(range(1, 21, 2))
for value in numbers:
print(value)
4-7 3 的倍数:创建一个列表,其中包含 3~30 内能被 3 整除的数字;再使用一个 for 循环将这个列表中的数字都打印出来。
numbers = list(range(3, 31, 3))
for value in numbers:
print(value)
4-8 立方:将同一个数字乘三次称为立方。例如,在 Python 中,2 的立方用 2**3 表示。请创建一个列表,其中包含前 10 个整数(即 1~10)的立方,再使用一个 for 循 环将这些立方数都打印出来。
cubes = []
for value in range(1 , 11):
cubes.append(value**3)
for cube in cubes:
print(cube)
4-9 立方解析:使用列表解析生成一个列表,其中包含前 10 个整数的立方。
cubes = [value**3 for value in range(1, 11)]
print(cubes)
0x03 使用列表的一部分
切片
和访问单个元素一样,切片可以使用正整数和负整数来选出列表的部分元素, 切片不仅仅用于列表,还可以运用到字符串等
示例一代码
items = ['book', 'bike', 'pen', 'mouse']
print(items[0:3])
示例一结果
>>['book', 'bike', 'pen']
示例二代码
如果没有指定第一个索引,那么自动从开头开始
items = ['book', 'bike', 'pen', 'mouse']
print(items[:3])
示例二结果
>>['book', 'bike', 'pen']
示例三代码
如果没有指定第二个索引,那么自动检索到末尾
items = ['book', 'bike', 'pen', 'mouse']
print(items[1:])
示例三结果
>>['bike', 'pen', 'mouse']
示例四代码
下面演示用负数检索
items = ['book', 'bike', 'pen', 'mouse']
print(items[-3:])
items = ['book', 'bike', 'pen', 'mouse']
print(items[:-1])
示例四结果
>>['bike', 'pen', 'mouse']
>>['book', 'bike', 'pen']
遍历切片
代码
items = ['book', 'bike', 'pen', 'mouse']
for item in items[:3]:
print(item.title())
结果
>>Book
>>Bike
>>Pen
切片还可以设置步长
num = list(range(0,6))
print(num)
print(num[0::2]) #ehco: 0 2 4
print(num[1::2]) #echo: 1 3 5
复制列表
如果要复制一个列表,你会想到怎么做呢?是直接把一个列表赋值给另一个列表吗?下面我们来看看。
猜想:把一个列表直接赋值给另一个列表
为了验证我们是不是复制了一个列表,我们在复制后给每个列表加上各自独特的元素加以区分
代码
my_languages = ['C', 'C++', 'PHP', 'Python']
friend_languages = my_languages
my_languages.append("HTML")
friend_languages.append("JavaScript")
print("My languages are:")
print(my_languages)
print("\nMy friend's languages are:")
print(friend_languages)
结果
>>My languages are:
>>['C', 'C++', 'PHP', 'Python', 'HTML', 'JavaScript']
>>My friend's languages are:
>>['C', 'C++', 'PHP', 'Python', 'HTML', 'JavaScript']
猜想错误
由以上的实验可知,将列表直接赋值给另一个列表,并不能实现复制,只是将他们指向了同一个列表
正确的做法
正确的做法是使用缺少索引的切片实现从头到尾的复制
代码
my_languages = ['C', 'C++', 'PHP', 'Python']
friend_languages = my_languages[:]
my_languages.append("HTML")
friend_languages.append("JavaScript")
print("My languages are:")
print(my_languages)
print("\nMy friend's languages are:")
print(friend_languages)
结果
>>My languages are:
>>['C', 'C++', 'PHP', 'Python', 'HTML']
>>My friend's languages are:
>>['C', 'C++', 'PHP', 'Python', 'JavaScript']
0x04 元组
列表是可以修改的,但有时候我们需要创建一系列不需要修改的元素。元组与列表高度相似, 但不同的是元组是不可被修改的。
定义元组
元组的定义与列表相似,不同的是元组使用圆括号而不是方括号
sizes = (20, 10)
如果试图修改元组中的元素
sizes[0] = 2
会得到如下的报错信息
Traceback (most recent call last):
File ““, line 1, in
TypeError: ‘tuple’ object does not support item assignment
遍历元组
元组的遍历与列表一样,也可以使用for循环来遍历。
修改元组变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值
代码
sizes = (20, 10)
print("Original sizes:")
print(sizes)
sizes = (30, 20)
print("\nModified sizes:")
print(sizes)
结果是不报错