相关阅读:
前言
前面有几篇文章讲解了怎么创建和使用列表,以及在列表中数据量过大的时候如何循环操作列表。今天我们来学习一下,如何快速的创建数值列表以及如何对列表进行切片。
1. 创建数值列表
需要存储一组数字的原因有很多,例如,在数据可视化中,处理的几乎都是数字(温度、距离、人口等)组成的集合。
列表非常适合用于存储数字集合,Python 也提供了很多工具,帮助我们高效地处理数字列表。
1.1 使用函数 range()
Python 函数 range()
让我们能轻松地生成一系列数字。例如,像下面这样打印一组数字:
for value in range(1, 5):
print(value)
运行上述代码,会打印数字1~5(不包含5)。
我们尝试在编译器运行一下这段代码,结果如题1-1:
通过上面简单地演示可以看出来,range(a,b)
函数会输出 [a,b)的数字。
所以,使用 range()
时,如果输出不符合预期,请尝试将指定的值加1或减1。
让我们更深入地认识一下 range() 函数
range(stop)
- stop: 计数到 stop 结束,但不包括 stop。默认从 0 开始,例如 range(5) 等价于 range(0, 5)
range(start, stop[, step])
-
start: 计数从 start 开始,包括 start。
-
stop: 计数到 stop 结束,但不包括 stop。
-
step: 步长。默认为1,例如 range(0, 5) 等价于 range(0, 5, 1)
关于步长
或许第一次接触编程的同学会对步长的含义有些迷糊,这里解释一下。
先看上面的代码,range(1,5),因为第三个参数没传,所以步长默认为1,输出的结果为 1 2 3 4
,每个数之间相差1。
所以如果我们想输出 1 3 5 7
,每个数之间相差2的一系列数,需要将 step 设置为2,代码如下:
for value in range(1, 10, 2):
print(value)
1.2 使用 range()
创建数字列表
大体上有 3 种使用 range() 创建数字列表的方法。下面让我们来一一讲解。
1.2.1 使用 list()
函数创建列表
要创建数字列表,可以使用函数 list()
将 range()
的结果直接转换成列表。
numbers = list(range(1, 5))
print(numbers)
结果如图1-2:
使用函数 range()
还可指定步长。例如,下面代码打印1~10内的奇数:
odd_numbers = list(range(1, 10, 2))
print(odd_numbers)
在这个示例中,函数 range()
从 1 开始,然后不断地加2,直到达到或超过终值(10),结果输出如下图1-3:
1.2.2 for
循环创建列表
list()
创建列表非常地方便,然而它并不能满足我们的所有创建数字列表的需求,比如,我需要一个数字列表,这个列表包含前10个整数(1~10)的平方。
这种列表就没法用 list()
函数来创建啦,不怕,我们有新方法:
squares = []
for value in range(1, 11):
square = value**2
squares.append(square)
print(squares)
首先,我们创建了一个空列表;
接下来,使用 range()
函数让 Python 遍历 1~10 的值;
然后,在循环中计算当前值的平方,并将结果存储到变量 square 中;
接着,将新计算得到的平方值附加到列表 squares 中;
最后,循环结束,打印列表 squares。
运行这段代码,结果如图1-4:
1.2.3 列表解析
前面介绍的生成列表 squares 的方式包含四五行代码,而列表解析让你只需编写一行代码就能生成这样的列表。列表解析将 for
循环和创建元素的代码合并成一行,并自动地附加新元素。
下面使用 列表解析 来创建前面看到的平方数列表:
squares = [value**2 for value in range(1,11)]
print(squares)
可以看到,我们在声明的列表 []
中定义了一个表达式,用于生成我们要储存到列表中的值。
在这个示例中,表达式为 value**2
,它计算平方值,其后的 for
循环将值1~10提供给表达式 value**2
。
请注意,这里的 for 语句末尾没有冒号
如果你不能理解,可以先背下来,这在以后会被多次的用到,运用的多了就能理解了。
结果与我们前面写的平方数列表相同,如图1-5:
以上的三种方法都可以用来生成数字列表,选择适合的方法就行。
2. 切片
之前的几篇文章,我们学习了如何访问单个列表元素,也学习了如何处理列表中的所有元素。其实我们还可以处理列表的部分元素,这部分元素 Python 称之为切片。
2.1 切片的基本用法
要创建切片,需要指定要使用的第一个元素和最后一个元素的索引。
语法规则如下:
# 假设 lst 是一个列表
lst[a:b] # 截取 lst 列表下标范围[a,b)的元素并作为新列表返回
下面的示例处理的是一个运动队成员列表:
players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[0:3])
运行这段代码,结果如图2-1:
可以看到,输出的是一个列表,包含前三名队员,对应的下标分别是:0、1和2。
你可以生成列表的任何子集,例如,如果你要提取列表的第2~4个元素,可将起始索引指定为1,并将终止索引设置为4:
players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[1:4])
这一次,切片始于“张括”,终于“张怡宁”,如图2-2:
如果没有指定第一个索引,Python 将自动从 0 开始:
players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[:4])
由于没有指定起始索引,Python 从列表开头开始提取,结果如图2-3:
要让切片终止于列表末尾,也可使用类似的语法。例如,要提取从第4个元素到列表末尾的所有元素,可以将起始索引指定为3,并省略终止索引:
players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[3:])
Python 将返回从第4个元素到列表末尾的所有元素,如图2-4:
无论列表多长,这种语法都能让你输出从特定位置到列表末尾的所有元素。
负数索引返回里列表末尾相应距离的元素,因此我们可以输出列表末尾的任何切片
例如,我们需要我们输出最后三名队员,我们可以:
players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[-3:])
运行这段代码,结果如图2-5:
上述代码打印出了最后三名队员的名字,即使队员名单的长度发生变化,也依然如此。
2.2 遍历切片
如果要遍历列表的部分元素,可在 for
循环中使用切片。
在下面的示例,我们遍历前三名队员,并打印他们的名字:
players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print("前三名运动员:")
for player in players[:3]:
print(player)
这次 for
循环只遍历了列表的前三名队员,结果如图2-6:
结尾语
本篇文章简单地介绍了怎么样创建数字列表和如何使用列表切片。
虽然文章中给的例子都很简单,但我还是希望有心学好 Python 的初学者能亲手敲一下这些代码。
如果你在学习过程中有任何疑问,可以关注文章下方↓↓↓的公众号及时与我联系,我们相互讨论,共同学习。
最后,祝你学有所成。