操作Python列表Ⅱ

相关阅读:

前言

前面有几篇文章讲解了怎么创建和使用列表,以及在列表中数据量过大的时候如何循环操作列表。今天我们来学习一下,如何快速的创建数值列表以及如何对列表进行切片。

1. 创建数值列表

需要存储一组数字的原因有很多,例如,在数据可视化中,处理的几乎都是数字(温度、距离、人口等)组成的集合。

列表非常适合用于存储数字集合,Python 也提供了很多工具,帮助我们高效地处理数字列表。

1.1 使用函数 range()

Python 函数 range() 让我们能轻松地生成一系列数字。例如,像下面这样打印一组数字:

for value in range(1, 5):
    print(value)

运行上述代码,会打印数字1~5(不包含5)。

我们尝试在编译器运行一下这段代码,结果如题1-1:
1-1

图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:
1-2

图1-2

使用函数 range() 还可指定步长。例如,下面代码打印1~10内的奇数:

odd_numbers = list(range(1, 10, 2))
print(odd_numbers)

在这个示例中,函数 range() 从 1 开始,然后不断地加2,直到达到或超过终值(10),结果输出如下图1-3:

1-3

图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-4

图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:
1-5

图1-5

以上的三种方法都可以用来生成数字列表,选择适合的方法就行。

2. 切片

之前的几篇文章,我们学习了如何访问单个列表元素,也学习了如何处理列表中的所有元素。其实我们还可以处理列表的部分元素,这部分元素 Python 称之为切片。

2.1 切片的基本用法

要创建切片,需要指定要使用的第一个元素和最后一个元素的索引。

语法规则如下:

# 假设 lst 是一个列表
lst[a:b] # 截取 lst 列表下标范围[a,b)的元素并作为新列表返回

下面的示例处理的是一个运动队成员列表:

players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[0:3])

运行这段代码,结果如图2-1:
2-1

图2-1

可以看到,输出的是一个列表,包含前三名队员,对应的下标分别是:0、1和2。

你可以生成列表的任何子集,例如,如果你要提取列表的第2~4个元素,可将起始索引指定为1,并将终止索引设置为4:

players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[1:4])

这一次,切片始于“张括”,终于“张怡宁”,如图2-2:

2-2

图2-2

如果没有指定第一个索引,Python 将自动从 0 开始:

players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[:4])

由于没有指定起始索引,Python 从列表开头开始提取,结果如图2-3:

2-3

图2-3

要让切片终止于列表末尾,也可使用类似的语法。例如,要提取从第4个元素到列表末尾的所有元素,可以将起始索引指定为3,并省略终止索引:

players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[3:])

Python 将返回从第4个元素到列表末尾的所有元素,如图2-4:

2-4

图2-4

无论列表多长,这种语法都能让你输出从特定位置到列表末尾的所有元素。

负数索引返回里列表末尾相应距离的元素,因此我们可以输出列表末尾的任何切片

例如,我们需要我们输出最后三名队员,我们可以:

players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print(players[-3:])

运行这段代码,结果如图2-5:

2-5

图2-5

上述代码打印出了最后三名队员的名字,即使队员名单的长度发生变化,也依然如此。

2.2 遍历切片

如果要遍历列表的部分元素,可在 for 循环中使用切片。

在下面的示例,我们遍历前三名队员,并打印他们的名字:

players = ['刘恒', '张括', '马龙', '张怡宁', '郭焱', '王亚楠', '丁宁']
print("前三名运动员:")
for player in players[:3]:
    print(player)

这次 for 循环只遍历了列表的前三名队员,结果如图2-6:

2-6

图2-6

结尾语

本篇文章简单地介绍了怎么样创建数字列表和如何使用列表切片。

虽然文章中给的例子都很简单,但我还是希望有心学好 Python 的初学者能亲手敲一下这些代码。

如果你在学习过程中有任何疑问,可以关注文章下方↓↓↓的公众号及时与我联系,我们相互讨论,共同学习。

最后,祝你学有所成。
公众号-猿天罡

欢迎大家点赞、关注、收藏,我是Kelvin,我们下期再见,bye
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值