第三章 列表(List)语法讲解

发布于:2024-12-19 ⋅ 阅读:(13) ⋅ 点赞:(0)
列表(List)语法讲解
3.3 管理列表

  在我们创建的列表中,元素的排列顺序常常是无法预测的,因为我们并非总能控制用户提供数据的顺序。这种情况下,是无法避免的,但是呢我们呈现给用户的数据又需要以某种特定的顺序给出,这就需要我们使用列表(List)的管理方式,对列表进行操作,进而达到用户需要的样式。

3.3.1 使用sort()方法对列表进行永久排序

  Python方法sort()让你能够较为轻松地对列表进行排序。

#定义一个列表
color = ['Yellow','Orange','Yellow','Green','Blue','Indigo','Purple','Light yellow']
#打印这个列表
print(color);
#对这个列表按字母顺序排序
color.sort();
#打印排序后的样式
print(color);

  输出结果:

#原样打出定义的列表
['Yellow', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Purple', 'Light yellow']

#经过排序后,按字母排序后,输出到控制台
['Blue', 'Green', 'Indigo', 'Light yellow', 'Orange', 'Purple', 'Yellow', 'Yellow']

  sort()方法能永久地修改列表元素的排列顺序。一旦使用了,就无法进行还原。

  还可以按与字母的相反顺序排列元素,只需向sort()方法传递参数reverse = True就可以。

#按与字母的相反顺序排列元素,设置reverse = True
color.sort(reverse=True);
#输出列表  ['Yellow', 'Yellow', 'Purple', 'Orange', 'Light yellow', 'Indigo', 'Green', 'Blue']
print(color);

  同样对列表元素顺序的修改也是永久的。

3.3.2 使用sorted()函数对列表进行临时排序

  要保留列表元素原来的排列顺序,并以特定的顺序呈现出来,可使用sorted()方法。sorted()函数让你能够按特定顺序显示列表元素,同时不影响他们在列表中的排列顺序。

#重新定义一个列表
message = []
message.append('Alice')
message.append('Stock')
message.append('Blue')
message.append('Python')
message.insert(int(len(message)/2),'Java')
message.insert(0,'JavaScript')
#打印出添加的列表元素
print(message)
#对列表元素进行sorted()排序
print(sorted(message))
#再次输出  看是否改变了顺序
print(message)

  输出结果:

#打印出添加的列表元素
['JavaScript', 'Alice', 'Stock', 'Java', 'Blue', 'Python']

#对列表元素进行sorted()排序
['Alice', 'Blue', 'Java', 'JavaScript', 'Python', 'Stock']

#再次输出  看是否改变了顺序
['JavaScript', 'Alice', 'Stock', 'Java', 'Blue', 'Python']

  通过上面的例子可以看出,调用sorted()函数后,列表元素的排列顺序并没有改变。

  进行sorted()进行排序后,如果要按字母相反顺序显示列表,也可以使用sorted()函数传递参数reverse = True。

#对列表元素进行sorted()排序
print(sorted(message))
#对列表元素进行sorted()排序后,反向输出
print(sorted(message,reverse=True))

  解释:

#对列表元素进行sorted()排序
['Alice', 'Blue', 'Java', 'JavaScript', 'Python', 'Stock']

#对列表元素进行sorted()排序后,反向输出
['Stock', 'Python', 'JavaScript', 'Java', 'Blue', 'Alice']

  并非所有的值都是全小写时,按字母顺序排序列表就要复杂一些。确定排列顺序时,有多种解读大写字母的形式,此时要指定准确的排列顺序,可能比这里所做的更加复杂。后面延续再讲。

3.3.3 反向打印列表

  要反转列表元素的排列顺序,可使用reverse()方法。

message.append('C#');
message.insert(-1,'C++');
#打印出生成的列表元素
print(message);
message.reverse();
#输出反向后的列表元素
print(message)

  输出结果:

#打印出生成的列表元素
['JavaScript', 'Alice', 'Stock', 'Java', 'Blue', 'Python', 'C++', 'C#']

#输出反向后的列表元素
['C#', 'C++', 'Python', 'Blue', 'Java', 'Stock', 'Alice', 'JavaScript']

  特殊注意:reverse()不是按与字母顺序相反的顺序排列列表元素,只是反转列表元素的排列顺序,并且reverse()方法永久地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,只需要对反转后的列表再次调用reverse()方法即可。

3.3.4 确定列表的长度

  使用len()函数,可以快速的获取列表的长度。

#再次反转列表元素
message.reverse()
print(message);
#获取列表的长度
print(len(message))

  输出结果:

#再次反转列表元素
['JavaScript', 'Alice', 'Stock', 'Java', 'Blue', 'Python', 'C++', 'C#']

#获取列表的长度
8

  列表的长度,是从1开始的并不是从0哦。

3.3.5 使用列表时避免索引错误

  在我们刚开始使用列表时,很容易犯一种错误,就是索引错误。假如,一个列表有且仅有三个元素,我却要要求控制台给我打出第四个元素,这就导致我们的控制台很难帮你实现这个事情,进而就会给你报一个错误,示例如下:

print(message);
#获取列表的长度
print(len(message))
#使用len()我可以知道列表(List)中含有元素八个,如果我要控制台输出索引为8的元素,看看会有怎样的效果
print(message[8])

  输出结果:

#获取列表元素
['JavaScript', 'Alice', 'Stock', 'Java', 'Blue', 'Python', 'C++', 'C#']

#获取列表的长度
8

#要控制台输出索引为8的元素  发现报错
Traceback (most recent call last):
  File "g:\Python\Basic_knowledge\Number_three_one.py", line 57, in <module>
    print(message[8])
          ~~~~~~~^^^
IndexError: list index out of range

  由上面的列子可以看出,索引为8的元素在列表message中不存在,顾报错,因为这个列表message总的长度就为8,要控制台打出第八个元素,就有点勉强控制台了,因为那根本就是不存的,控制台无法为你找到。

  如果我们要得到列表中的最后一个元素,只需要列表的总长度减1就行,因为长度是从1开始,而索引是从0开始的。

print(message);
#获取列表的长度
print(len(message))
#使用len()我可以知道列表(List)中含有元素八个,如果我要控制台输出索引为8的元素,看看会有怎样的效果
#print(message[8])
#打出最后一个元素
print(message[int(len(message)-1)])   #结果C#
#获取列表元素
['JavaScript', 'Alice', 'Stock', 'Java', 'Blue', 'Python', 'C++', 'C#']

#获取列表的长度
8

#打出最后一个元素
C#

  特殊注意:在发生索引错误却找不到解决办法时,我们可以尝试将列表的长度打印出来。列表可能与你以为的截然不同,在程序对其进行动态处理时极其重要。查看列表或其包含的元素数,可帮助我们排查这种逻辑错误。

学习本节,我们应该要清楚本节的重点:

  1. 如何定义列表;
  2. 如何访问元素;
  3. 如何修改元素;
  4. 如何使用各元素的值;
  5. 如何删除元素(del 语句、pop()方法、remove()方法);
  6. 在定义的列表中,如何添加添加元素(append()追加,insert()任意位置插入元素);
  7. 对列表进行管理(临时排序、终生性排序、列表反转输出以及列表的长度);
  8. 如何避免因为索引导致的错误。

第四章 操作列表

4.1 遍历整个列表

  遍历整个列表,在Python中,我们可以使用for循环,

#定义一个空列表
message = [];
#不停的向列表message中追加元素
message.append('Apple');
message.append('Orange');
message.append('banana');
message.append('Cat');
message.insert(0,'Alice');
message.insert(-1,'purple');
message.insert(int(len(message)/2),'blue');
#打印出生成后的列表
print(message);
#遍历整个列表
for i in message:
    print(f"{i}是大家都希望的东西吗?\n");

  输出结果:

#打印出生成后的列表
['Alice', 'Apple', 'Orange', 'blue', 'banana', 'purple', 'Cat']

#遍历整个列表
Alice是大家都希望的东西吗?

Apple是大家都希望的东西吗?

Orange是大家都希望的东西吗?

blue是大家都希望的东西吗?

banana是大家都希望的东西吗?

purple是大家都希望的东西吗?

Cat是大家都希望的东西吗?

  定义一个for循环,在上面的代码中,让Python从列表message中取出一个列表元素,并将其与变量i进行关联。最后,让Python打印出赋给变量i的列表元素。这样,对应列表中的每个列表元素,Python都将重复执行最后两行代码。

4.1.1 深入研究循环

  循环很重要,因为它是能让计算机自动重复完成重复工作的方法之一。

  解析:

代码: for i in message:

这行代码【for i in message:】,让Python获取列表message中的第一个列表元素“Alice”,并将其与变量i进行关联,然后再执行下面的代码:

代码: print(f"{i}是大家都希望的东西吗?\n");

Python就将与i关联后的“Alice”,通过print打印到控制台。

输出结果: Alice是大家都希望的东西吗?

然后继续进行列表的第二个元素,…,最后是列表的最后一个元素。

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

  在for循环中,可以对每个元素执行任意操作。

#定义一个空列表
message = [];
#追加元素
message.append('Blue');
message.append('Stock');
message.append("Banana");
message.insert(-1,"Alice");
message.append('max');
message.append('sam');
#输出列表元素
print(message);
#应用每一个列表元素
for i in message:
    print(f"{i.title()}是年度,最具影响力的人物之一。\n")

  在for循环中,想包含多少行代码都可以。在代码行【for i in message:】后面,每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次。因此,可对列表中的每个值执行任意次数的操作。

  输出结果:

#输出列表元素
['Blue', 'Stock', 'Alice', 'Banana', 'max', 'sam']

#应用每一个列表元素
Blue是年度,最具影响力的人物之一。

Stock是年度,最具影响力的人物之一。

Alice是年度,最具影响力的人物之一。

Banana是年度,最具影响力的人物之一。

Max是年度,最具影响力的人物之一。

Sam是年度,最具影响力的人物之一。

  可以再在for循环中,继续输出需要的信息,以让每个列表元素都进行第二次的输出,此外还可以进行第三次、第四次、…、第n次的输出。

#应用每一个列表元素
for i in message:
    print(f"{i.title()}是年度,最具影响力的人物之一。")
    print(f"{i.title()}是国内名流之一。\n");
#每个列表元素,都进行二次输出
Blue是年度,最具影响力的人物之一。  
Blue是国内名流之一。

Stock是年度,最具影响力的人物之一。 
Stock是国内名流之一。

Alice是年度,最具影响力的人物之一。 
Alice是国内名流之一。

Banana是年度,最具影响力的人物之一。
Banana是国内名流之一。

Max是年度,最具影响力的人物之一。   
Max是国内名流之一。

Sam是年度,最具影响力的人物之一。   
Sam是国内名流之一。
4.1.3 在for循环结束后执行的操作

  在for循环中,没有缩进的代码都执行一次,因为Python语言,它是一行一行的执行且只执行一次,不会重复执行操作。注意:Python中的for循环和其他程序语言不一样,没有大括号,而是靠缩进来区分。

#应用每一个列表元素
for i in message:
    print(f"{i.title()}是年度,最具影响力的人物之一。")
    print(f"{i.title()}是国内名流之一。\n");
print('名流基本都是我们学习的对象!!')

  输出结果:

#输出结果:在for循环中,缩进后的,都被循环执行
Blue是年度,最具影响力的人物之一。
Blue是国内名流之一。

Stock是年度,最具影响力的人物之一。
Stock是国内名流之一。

Alice是年度,最具影响力的人物之一。
Alice是国内名流之一。

Banana是年度,最具影响力的人物之一。
Banana是国内名流之一。

Max是年度,最具影响力的人物之一。
Max是国内名流之一。

Sam是年度,最具影响力的人物之一。
Sam是国内名流之一。

#没有进行缩进,故只执行一次
名流基本都是我们学习的对象!!

  在Python中,for循环是我们对数据集整体执行以及处理数据的必备技能。

4.2 避免缩进错误

  Python根据缩进来判断代码行与前一个代码行的关系。Python通过使用缩进让代码更易读,简单来说,它要求我们使用缩进来使你写的代码整洁且结构清晰,在较长的Python程序中,你将看到缩进程序各不相同的代码块,这让你对程序的组织结构有大致的认识。

  当开始编写必须正确缩进的代码时,需要特别注意一些常见的缩进错误。

  1. 进行不必要的代码缩进;
  2. 该进行缩进,却没有进行缩进;
4.2.1 忘记缩进

  对于位于for语句后面且属于循环组成部分的代码行,一定是需要进行缩进的,如果忘记了缩进,Python会提醒您:
在这里插入图片描述

for i in message:
print(i)  #应为缩进块 Pylance

   紧跟for语句后面的代码进行缩进,可消除这种缩进错误。

message = ['Blue', 'Stock', 'Alice', 'Banana', 'max', 'sam']
for i in message:
    print(i)
4.2.2 忘记缩进额外的代码行

  有时候,循环能够运行而不会报告错误,但结果可能会出乎意料。试图在循环中执行多项任务,却忘记缩进其中的一些代码行时,就会出现这种情况。

  程序:

for i in message:
    print(i)
print(f"{i.title()}是具有影响力的人物之一!")    

  第二条print语句,原本需要缩进,但Python发现for语句后面有一行代码是缩进的,因此它没有报告错误。最终的结果是,对于列表中的每位列表元素,都执行了第一条print语句,因为它缩进了;而第二条print语句没有缩进,因此它只在循环结束后执行一次。由于变量i的终值为’sam’,因此只有她收到了消息“Sam是具有影响力的人物之一!”

Sam是具有影响力的人物之一!

  这是一个逻辑错误。从语法上看,这些Python代码是合法的,但由于存在逻辑错误,结果并不符合预期。如果你预期某项操作将针对每个列表元素都执行一次,但它却只执行了一次,请确定是否需要将一行或多行代码缩进。

4.2.3 不必要的缩进

  如果你不小心缩进了无需缩进的代码行,Python将指出这一点:

message = ['Blue', 'Stock', 'Alice', 'Banana', 'max', 'sam'];
    print(message);

在这里插入图片描述

four.py
  File "g:\Python\VS_Code\Number_one_Basic_Knowledge\four.py", line 22
    print(message);
IndentationError: unexpected indent

  为避免意外缩进错误,请只缩进需要的代码。在编写的程序中,只有要在for循环中对每个元素执行的代码进行缩进。

4.2.4 循环后不必要的缩进

  如果你不小心缩进了应在循环结束后执行的代码,这些代码将针对每个列表元素重复执行。在有些情况下,这可能导致Python报告语法错误,但在大多数情况下,这只会导致逻辑错误。

message = ['Blue', 'Stock', 'Alice', 'Banana', 'max', 'sam'];
#输出列表
print(message);
#应用每一个列表元素
for i in message:
    print(f"{i.title()}是年度,最具影响力的人物之一。")
    print(f"{i.title()}是国内名流之一。");
    print('名流基本都是我们学习的对象!!\n');

  输出结果:

#输出列表
['Blue', 'Stock', 'Alice', 'Banana', 'max', 'sam']

#应用每一个列表元素
Blue是年度,最具影响力的人物之一。
Blue是国内名流之一。
名流基本都是我们学习的对象!!

Stock是年度,最具影响力的人物之一。
Stock是国内名流之一。
名流基本都是我们学习的对象!!

Alice是年度,最具影响力的人物之一。
Alice是国内名流之一。
名流基本都是我们学习的对象!!

Banana是年度,最具影响力的人物之一。
Banana是国内名流之一。
名流基本都是我们学习的对象!!

Max是年度,最具影响力的人物之一。
Max是国内名流之一。
名流基本都是我们学习的对象!!

Sam是年度,最具影响力的人物之一。
Sam是国内名流之一。
名流基本都是我们学习的对象!!

  解释:由上面的程序输出可知,结果【名流基本都是我们学习的对象!!】被执行了多次,即列表message中的长度,这个长度是多少,这句就执行了几次。按照上面的程序输出结果,【名流基本都是我们学习的对象!!】应该只执行一次,但是由于缩进的错误导致,这个输出,输出了六次,即列表的长度,犯了一个逻辑错误。

4.2.5 遗漏了冒号

  for语句末尾的冒号告诉Python,下一行是循环的第一行。

  如果不小心遗漏的冒号,就会直接导致语法错误,因为Python不知道你要干什么。这种错误虽然易于消除,但是隐藏的特别好,不容易被发现,特别是程序量大的代码,需要花很长的时间去找这个错误。

message = ['Blue', 'Stock', 'Alice', 'Banana', 'max', 'sam'];  
for n in message
    print(f"{n.title()}是年度,最具影响力的人物之一。")

  报的错误:

four.py
  File "g:\Python\VS_Code\Number_one_Basic_Knowledge\four.py", line 30
    for n in message
                    ^
SyntaxError: expected ':'
4.3 创建数值列表

  Python也需要存储一些带数字的列表,在数据可视化中,处理的几乎都是由数字(如温度、距离、人口数量、经度和维度等)组成的集合。

  列表非常适合用于存储数字集合,而Python提供了很多工具,可帮助我们高效的处理数字列表。明白如何使用这些工具,即便列表包含数百万个元素,我们编写的代码也能运行的很好。

4.3.1 使用函数range()

  Python函数range()让我们能够轻松地生成一系列的数字。

  函数语法:

语法:range(start, stop[, step])


参数说明:
	start: 计数从 start 开始。默认是从 0 开始。例如range5)等价于range05;
	stop: 计数到 stop 结束,但不包括 stop。例如:range05) 是[0, 1, 2, 3, 4]没有5
	step:步长,默认为1。例如:range05) 等价于 range(0, 5, 1)
for i in range(1,12):
    print(i);

  打印数字1到11,使用range(1,12),输出的结果如下:

1
2
3
4
5
6
7
8
9
10
11

  将生成的数字存到列表number中,只需要将每次循环的值通过append()方法,不停的向后面追加。

#定义一个空的数值列表
number = []

for i in range(1,12):
    #将生成的值通过append()方法追加到空的列表中
    number.append(i);
    #将生成的值打印到控制台
    print(i);
#输出列表
print(number);   

  输出:

#将生成的值打印到控制台
1
2
3
4
5
6
7
8
9
10
11

#输出列表
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
4.3.2 使用range()创建数字列表

  要创建数字列表,可使用函数list()将range()的结果直接转换为列表。如果range()作为list()的参数,输出将为一个数字列表。

numbers = list(range(1,100));
print(numbers);

  输出结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

  使用函数range()时,还可以指定步长。如下:

numbers = list(range(1,100,2));
print(numbers);

  输出结果:

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

  使用range()几乎能够创建任何需要的数字集。

#定义一个空的列表
numbers = [];                       
for i in range(10,60):
    #进行乘方运算
    i = i**2
    #将进行乘方运算后的结果追加到列表numbers中
    numbers.append(i);
#输出这个列表
print(numbers);
#输出这个列表
[100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1600, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401, 2500, 2601, 2704, 2809, 2916, 3025, 3136, 3249, 3364, 3481]

  首先,我们创建了一个空列表(numbers);接下来,使用函数range()让Python遍历10~60的值。在循环中,计算当前值的平方,并将结果存储到变量i中。然后,将新计算得到的平方值追加到列表numbers末尾。最后,循环结束后,打印列表numbers:

  为让这些代码更简洁,可不使用临时变量i,而直接将每个计算得到的值附加到列表末尾:

numbers = [];
for i in range(10,60):
    numbers.append(i**2);
print(numbers);

  以上的内容,是本人自学Python,写的笔记,如有错误,请留言哦!!!本人会在第一时间及时更正。


网站公告

今日签到

点亮在社区的每一天
去签到