沉铝汤的破站

IS LIFE ALWAYS THIS HARD, OR IS IT JUST WHEN YOU'RE A KID

python-操作列表

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)

结果是不报错