python输入一个列表、分别输出每步相加得列表_Python的列表切片(List Slice)教程

列表切片(List Slice)

Python中的列表存储的是一系列数据,每个数据都可以通过索引来修改或引用它的值。假设我要取列表中的连续的一片数据,比如索引从1开始到6结束,但不包括索引为6的所有数据,应该怎么操作呢?这可以通过编写代码实现,以下是示例代码:

>>> data =[3,2,7,6,8,10,24,76,8] # 定义列表

>>> start = 1 # 定义起始索引

>>> end = 6 # 定义结束索引

>>> subdata = [ ] # 定义空列表

>>> for index in range(start,end): # 从start到end迭代index

subdata.append(data[index]) # 给列表添加数据

>>> subdata

[2, 7, 6, 8, 10]

>>>

上面的确是一个不错的方法,但是每次取一序列数据都要编写一段代码吗?答案是否定的。Python早为我们准备好了更简洁的语法来获取列表中的一片数据。这叫做切片,对列表进行切片操作,返回的结果也是列表。显然,我们需要知道起始索引和结束索引,就像上面一样,然后把这两个值放在中括号中以冒号隔开。以下是切片语法示例:

>>> sub = data[start:end] # 取data列表中以start开始,end结束,不包括end索引数据的数据

>>> sub

[2, 7, 6, 8, 10]

>>>

我们看到,结果和我们上面编写的程序运行的结果是一模一样的。以下是图示:

上图起始索引是1,结束索引是6。如果不写start,那么会默认从零开始,如果不写end,那么会把start后面的所有数据都包括。如果两个都不写,相当于拷贝了列表。我们来实践一下:

>>> data =[3,2,7,6,8,10,24,76,8]

>>> data[:5] # 取从索引为0开始到5结束的所有数据(不包括索引为5,下同)

[3, 2, 7, 6, 8]

>>> data[5:] # 取从索引为5开始的所有数据

[10, 24, 76, 8]

>>> data[:] # 取从索引为0开始的所有数据

[3, 2, 7, 6, 8, 10, 24, 76, 8]

>>>

由于列表中最后一个数据的索引可以写为-1,所以下面的语法也是可以的。

>>> data[5:-1] # 取从索引为5开始到最后一个数据的所有数据

[10, 24, 76]

>>> data[:-4] # 取从0开始到索引为-4的那一序列数据

[3, 2, 7, 6, 8]

>>>

如果要取1,3,5,7索引号的这几个数据应该怎么取呢?这也可以通过编写一个程序来实现,当然Python也为我们准备好了语法,接下来先学习步长。

步长(Step)

步长,就是每步的长度之简称。它的英文为step,就是步骤,步子的意思。我们知道,range可以生成一系列整数。它有步长这个参数,如range(1,10,2)中的2就是步长。它能产生1,3,5,7,9这几个数据。 在这里,每步的长度是2,当我们不写第三个参数的时候,步长默认为1。如果要取列表[3,2,7,6,8,10,24,76,8]中的索引号为奇数的所有数据,我们先来编个程序完成这个要求,请看代码:

>>> subdata = []

>>> data = [3,2,7,6,8,10,24,76,8]

>>> for index in range(1,8,2):

subdata.append(data[index])

>>> subdata

[2, 6, 10, 76]

>>>

当然,Python也为我们准备好了语法,我们只要在切片的时候再加一个参数就行了。这个参数就是步长。上面得出来的结果,我们只要用subdata = data[1:8:2]这句代码就行了。以下是图例:

上面data[1:8:2]中的2就是步长,像range命令一样,不写它的值它是默认为1的,所以data[1:8:]和data[1:8]的值是一样的。步长一般是正数,它也可以是负数,这时候我们就要倒着取数据,如data[-1:0:-1],表示从最后一个数据开始,倒着取数据,一直取到索引为0的数据,所以返回的列表是:[8, 76, 24, 10, 8, 6, 7, 2]。看下面两种取法,返回的列表是一样的:

>>> data[-1::-1] # 取从倒数第一个数据开始的所有数据

[8, 76, 24, 10, 8, 6, 7, 2, 3]

>>> data[::-1] # 由于步长为-1,所以也是取从倒数第一个数据开始的所有数据

[8, 76, 24, 10, 8, 6, 7, 2, 3]

前面说了,如果不写起始索引,那么默认为0,不过那是在步长为正数的情况。如果步长为负数,那么不写起始索引的话,默认是-1。综上所述,列表切片语法图为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值