python自学Day03(自学书籍python编程从入门到实践)

第4章 操作列表

  • 只需要几行代码无论列表有多长,循环都能够让我对列表的每个元素都采取一个或一系列相同的措施,从而高效的处理任何长度的列表。

4.1 遍历整个列表

  • 对列表中每个元素都拿出来,进行一个或者一系列相同的操作时候需要遍历列表。
  • 搭配for 循环使用
Names = ['henry','beckham','ronaldo','arp','rooney','kaka']
#使用for循环在列表中调取列表中的每一个元素 存贮在变量 Name 中
for Name in Names :
    print('My favorite football player is '+Name.title())

输出结果为:

My favorite football player is Henry
My favorite football player is Beckham
My favorite football player is Ronaldo
My favorite football player is Arp
My favorite football player is Rooney
My favorite football player is Kaka

4.1.1 深入地研究循环

  • for 循环在上述循环中,计算器首先读入第一行存入一个列表Names
  • 第二步提取列表Names第一个元素 henry 存储到变量Name 中
  • 第三步执行输出,输出时给变量调用title方法,让首字母大写,然后打印出整句。
  • 因为列表中还有其他值,于是循环继续,来到第二个元素,重复执行第二、三步的操作。
  • 直到列表中的元素被调用完,结束。
  • 注意:for循环中用于存贮每个值得临时变量,虽然可以指定任何名称但是便于操作,最好使用列表复数,变量单数的模式书写名称。

4.1.2 在for循环中执行更多的操作

  • 在for循环中想包含多少代码都可以。
  • for循环包含的需要执行的代码,需要缩进。

4.1.3 在for循环结束后执行一些操作

  • 在for循环后面没有缩进的代码,只执行一次。
  • 使用for循环对数据集执行整体操作的不错的方式。

4.2 避免缩进错误

  • 缩进的目的是为了让你的代码结构清晰并且便于判断代码之间的关联。

4.2.1 忘记缩进

Names = ['henry','beckham','ronaldo','arp','rooney','kaka']
#使用for循环在列表中调取列表中的每一个元素 存贮在变量 Name 中
for Name in Names :
print('My favorite football player is '+Name.title())

结果:

  File "D:/study/pythonwenjian/列表组织的测试.py", line 4
    print('My favorite football player is '+Name.title())
        ^
IndentationError: expected an indented block

4.2.2 忘记缩进额外的代码行

  • 例如一个for循环下面本来是要输出两个print函数内容,但是第二个忘记缩进。
  • 格式上不会有错误,但是逻辑上出错了,没有达到程序员本身想要达到的目的。

4.2.3 不必要的缩进

  • 对无需缩进的代码进行缩进

4.2.4 循环后不必要的缩进

  • 拿到一个需求编写代码时候,我们首先要理清代码的逻辑,在书写代码时注意细节。

4.2.5 遗漏了冒号

  • 在for循环中 冒号是告诉计算机代码之间的关系,所以要注意不要遗漏了冒号。

练习:

#将三个口味的披萨组成一个列表
Pizza_list = ['Pizza California','Pizza Hawaii','Pizza Mushroom']
#使用for循环将列表中的披萨逐个打印
for Pizza in Pizza_list :
    print('I like '+Pizza)
#在程序末尾加入一句话,不包含在for循环中。
print('I really love pizaa!')

结果:

I like Pizza California
I like Pizza Hawaii
I like Pizza Mushroom
I really love pizaa!

4.3 创建数值列表

4.3.1 使用函数range()

  • python中使用函数range让你能够轻松的生成一系列数字。
  • range内的三个参数(起始值,结束值,步长)其中起始值包含在范围内,结束值不在范围内,而步长则是每一步单位。
#range函数中 起始值为0包含其中 结束值为4不包含4 默认步长为1
for i in range(0,4):
    print(i)
#range函数中 起始值为1包含1 结束值为10不包含10 步长为2
for y in range(1,10,2):
    print(y)

结果为:

0
1
2
3
1
3
5
7
9

4.3.2 使用range()创建列表

  • 使用函数list()将range()的结果直接转换为列表。
  • 也可以先创建一个新的空列表,然后使用for循环将range中的值利用append方法添加到空列表当中去。
#方法一:利用list函数 将range的结果直接转换为列表
Numbers = list(range(1,6))
print(Numbers)

结果:

[1, 2, 3, 4, 5]
#方法二:创建空列表 利用for循环 将range结果通过append方法一次加入空列表中
Numbers = []
for Number in range(1,6):
    Numbers.append(Number)
print(Numbers)

结果:

[1, 2, 3, 4, 5]

4.3.3 对数字列表进行简单的统计计算

  • min函数 计算列表中的最小值
  • max函数 计算列表中的最大值
  • sum函数 计算类表中值得总和
x = [1, 2, 3, 4, 5]
print(min(x))
print(max(x))
print(sum(x))

结果:

1
5
15

4.3.4 列表解析

  • 将for循环和创建新元素的代码合成一行,并自动附加新元素。
  • 列表 = [ 表达式 for循环 判断语句]
#1-100中能够整除20的列表
Numbers = []
for Number in range(1,101) :
    if Number%20 ==0:
        Numbers.append(Number)
print(Numbers)

结果为:

[20, 40, 60, 80, 100]
#使用解析列表一行代码写出如上述代码相同效果的代码
Numbers = [Number for Number in range(1,101) if Number%20 == 0]
print(Numbers)

结果为:

[20, 40, 60, 80, 100]

练习:

#4-3 使用for循环打印1-20(包含)
for i in range(1,21):
    print(i)

结果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#4-4创建一个列表,其中包函数字1- 10在使用一个for循环讲这些数字打印出来
Numbers = list(range(1,11))
for Number in Numbers:
    print(Number)

结果为:

1
2
3
4
5
6
7
8
9
10
#4-5 计算1-100总和 创建一个列表包含1-100 分别找出最大值 最小值 以及列表元素总和
list_4 =list(range(1,101))
print(min(list_4))
print(max(list_4))
print(sum(list_4))

结果为:

1
100
5050
#4-6 通过range创建一个奇数列表 包含1-20 奇数并且打印出来
list_6 = list(range(1,21,2))
print(list_6)

结果为:

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
#4-7 创建一个列表包含3-30内 能被3整除的数 并且逐个打印出来
list_7 = []
for i in  range(3,31):
    if i%3 == 0 :
        list_7.append(i)
        print(i)
print(list_7)

结果为:

3
6
9
12
15
18
21
24
27
30
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
#4-8 创建一个列表 包含1-10 的立方 并且逐个打印出来
list_8 = []
for i in range(1,11):
    list_8.append(i**3)
    print(i**3)
print(list_8)

结果为:

1
8
27
64
125
216
343
512
729
1000
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
#4-9 使用列表解析生成4-8
list_9 = [i**3 for i in range(1,11)]
print(list_9)

结果为:

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

4.4 使用列表的一部分

4.4.1 切片

  • 列表名称[起始值:结束值:步长] 起始值包含在内 结束值不包含在内 步长为单位默认为1
  • 起始值 和 结束值 所对应的是列表的索引值
Nubers = [i for i in range(0,11)]
print(Nubers)
print(Nubers[0:3])
print(Nubers[1:])
print(Nubers[:6])
print(Nubers[ : : 2])
print(Nubers[4:10:2])

结果为:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[0, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[0, 1, 2, 3, 4, 5]
[0, 2, 4, 6, 8, 10]
[4, 6, 8]
  • 使用 - 号倒着索引
Nubers = [i for i in range(0,11)]
print(Nubers)
print(Nubers[-2:-6:-1])
print(Nubers[-2:])
print(Nubers[:-6])
print(Nubers[-1: :-2])

结果为:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[9, 8, 7, 6]
[9, 10]
[0, 1, 2, 3, 4]
[10, 8, 6, 4, 2, 0]

注意事项:

Nubers = [i for i in range(0,11)]
print(Nubers)
#输出为空列表
print(Nubers[-2:-6])

结果为:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[]

4.4.2 遍历切片

List = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in List[:7]:
    print(i)

结果为:

0
1
2
3
4
5
6

4.4.3 复制列表

  • 复制整个列表可使用切片 省略 起始索引 和 结束索引 的方法,例如创建一个数值列表A,然后复制给B
A = [1,2,5,6,9]
B = A[:]
print(A)
print(B)

结果:

[1, 2, 5, 6, 9]
[1, 2, 5, 6, 9]
  • 然后我们探索一个问题B是通过A切片的方式复制过来的,那么A B的改变会影响彼此吗?
  • 我们往A列表中加一个0,往B列表中加一个7 看看变化
A = [1,2,5,6,9]
B = A[:]
A.append(0)
B.append(7)
print(A)
print(B)

结果:

[1, 2, 5, 6, 9, 0]
[1, 2, 5, 6, 9, 7]
  • 执行的结果证明,没有互相影响。那么我们可以理解为 [ : ] 方式复制列表相当于给A的副本给了B 
  • 然后我们探索一下直接赋值B=A 执行上述操作是否会彼此影响
A = [1,2,5,6,9]
B = A
A.append(0)
B.append(7)
print(A)
print(B)

结果:

[1, 2, 5, 6, 9, 0, 7]
[1, 2, 5, 6, 9, 0, 7]
  • 执行结果证明,如果直接赋值两个列表同时改变。那么我们可以理解为 变量A B同时指向一个列表

练习:

#打印消息,再使用切片打印前三个元素
A = 'The first three items in the list are:'
print(A[:3])
#使用切片打印列表中间的三个元素
A = 'Three items in from the middle of the list are:'
print(A[23:26])
#使用切片打印列表末尾的三个元素
A = 'The lsat three items in the list are:'
print(A[-1:-4:-1])
#写出一个球星列表,然后复制给你的朋友喜欢球星列表,在两个列表中添加不同球星。
#使用for循环逐个打印出你们喜欢的球星
Names = ['henry','beckham','ronaldo','arp','rooney','kaka']
Friend_plers = Names[:]
Names.append('messi')
Friend_plers.append('Nash')
for i in Names:
    print('My favorite player is '+i)
for y in Friend_plers:
    print("My friend's favorite player is "+y)

结果:

 1 The
 2  mi
 3 :er
 4 My favorite player is henry
 5 My favorite player is beckham
 6 My favorite player is ronaldo
 7 My favorite player is arp
 8 My favorite player is rooney
 9 My favorite player is kaka
10 My favorite player is messi
11 My friend's favorite player is henry
12 My friend's favorite player is beckham
13 My friend's favorite player is ronaldo
14 My friend's favorite player is arp
15 My friend's favorite player is rooney
16 My friend's favorite player is kaka
17 My friend's favorite player is Nash

4.5 元组

  • 列表是可以修改的,用 [ ] 标识 元组是不可修改的 用( ,)来表示 逗号分隔是元组标识的关键

4.5.1 定义元组

  • 使用()和 , 标识
  • , 号是关键
A = (3)
print(type(A))
A = (3,)
print(type(A))

输出结果:

<class 'int'>
<class 'tuple'>
  • 第一个里面虽然使用了()标识 但是类型是整数
  • 第二个加了 , 之后 类型是元组类型 所以 ,是关键

4.5.2 遍历元组中所有的值 

  • 使用for循环 遍历元组中所有的值
#创建一个元组A
A = (3,6,9)
for i in A:
    print(i)

结果为:

3
6
9

4.5.3 修改元组变量

  • 元组的元素是不可修改的,所以修改元组变量我们可以使用重新赋值的方法
#我们首先探索 使用列表切片的方式修改元组元素
A = (3,6,9)
A[0] = 1
print(A)

结果为:

Traceback (most recent call last):
  File "D:/study/pythonwenjian/列表组织的测试.py", line 3, in <module>
    A[0] = 1
TypeError: 'tuple' object does not support item assignment
#我们再来探索使用重新赋值的方法来修改元组
A = (3,6,9)
A = (4,5,6)
print(A)

结果为:

(4, 5, 6)

4.6 设置代码格式

  • 让代码易于阅读
  • 遵循一些代码格式的约定

4.6.1 格式设置指南

  • pep8 格式设置指南
  • 编写清晰易读的代码

4.6.2 缩进

  • tab键一个缩进单位 = 四个 空格
  • 利用缩进处理程序的逻辑关系

4.6.3 行长 

  • 建议每行不超过80字符
  • 协作编写编程都需要参与者遵守一个规则那就是pep8指南

4.6.4 空行

  • 使用空行分隔代码,不可乱用
  • 一切皆有序

课后阅读:pep8 编码指南中文版

https://blog.csdn.net/ratsniper/article/details/78954852#introduction-%E4%BB%8B%E7%BB%8D

猜你喜欢

转载自www.cnblogs.com/raoqinglong/p/11509728.html
今日推荐