列表与元组(二)


前言

列表与元组第二弹,本节主要介绍分片


一、分片

分片操作是从序列A中获取一个子序列B,序列A可以称为父序列。从A中获取B需要指定B在A中的开始索引和结束索引,因此分片操作需要制定两个索引。由于字符串可以看作字符的序列,所以可以用序列的资格分片特性截取子字符串。

1、通过分片操作获取一个Url的一级域名和完整域名
url='http://geekori.com'
print(url[8:14])
print(url[8:19])
输出结果:
eekori
eekori.com

在上面的代码中,使用url[8:14]来截取url中的"eekori",其中8和14是url中的两个索引,可以看到两个索引之间要使用(:)分隔。


如果留心,你会发现,索引15并不是“i”的索引,而是“.”的索引,没错,在指定子序列结束索引时,要指定子序列最后一个元素的下一个元素的索引,因此应该指定“.”的索引么不是“i”的索引。


那么如果子序列的最后一个元素,恰好是父序列的最后一个元素该怎么办呢?例如,url的最后一个元素是“m”,如果要截取‘geekori.com’,子序列的结束索引应该如何指定呢?其实子序列的结束索引只要制定父序列最后一个元素的索引加1即可。由于父索引最后一个元素“m”的索引是18,因此要截取“geekori.com”,需要指定结束索引为19,也就是url[8:19]

1、省略子序列的索引

首先看一个用分片截取子序列的例子

2、通过分片操作截取num序列中的某个子序列
num=[1,2,3,4,5,6,7,8]
print(num[3:5])
print(num[0:1])
print(num[5:7])
print([-3:-1])
输出结果:
[4, 5]
[1]
[6, 7, 8]
[6, 7]

2、通过将结束索引设为0,获取一个空序列

num=[1,2,3,4,5,6,7,8]
print(num[-3:0])
#输出结果:
[]

Python语言规定,如果结束索引比开始索引结束的晚,那么就会返回一个空序列,在这里索引0比索引-3出现的晚。如果要使用负数作为索引,并且获取的子序列的最后一个元素与父序列的最后一个元素相同,那么可以省略结束索引,或结束索引用正整数。

3、使用负索引作为开始索引,并省略结束索引

num=[1,2,3,4,5,6,7,8]
print(num[-3:])
print(num[-3:8])
输出结果:
[6, 7, 8]
[6, 7, 8]

4、省略开始索引

num=[1,2,3,4,5,6,7,8]
print(num[:3])
#输出结果:
[1,2,3]

5、省略开始索引和结束索引

省略开始索引和结束索引会复制整个子序列
num=[1,2,3,4,5,6,7,8]
print(num[-:])
#输出结果;
[1,2,3,4,5,6,7,8]

二、设置步长

在对序列分片中,默认的步长是1,也就是说,获取的子序列的元素都是相邻的,如果要获取不相邻的元素,就需要指定步长。例如:要获取1,、3、5的元素作为子序列的元素,就需要将步长设为2.

1、通过改变分片操作的步长,获取元素不相邻的子序列
num=[1,2,3,4,5,6,7,8]
print(num[1:6:2])
#输出结果:
[2, 4, 6]

在上面的代码中,使用num[1:6:2]获取索引为1、3、5的元素作为子序列的元素,其中2是步长,可以看到,开始索引、结束索引和步长都用(:)分隔。
其实,开始索引和结束索引和步长都是可以省略的。

2、省略开始索引和结束索引
num=[1,2,3,4,5,6,7,8]
print(num[:7:2])
print(num[::2])
print(num[3::2])
输出结果:
[1, 3, 5, 7]
[1, 3, 5, 7]
[4, 6, 8]

步长不能为0,但可以是负数,如果步长为0,则会抛出异常,如果步长是负数,则会熊右侧开始分片,这时候开始索引要大于结束索引。

num=[1,2,3,4,5,6,7,8,9]
print(num[8:2:-2])#步长为-2,从索引为8的元素开始,一直索引到位3的元素,运行结果:[9,7,5]
print(num[8:2:-1])#步长为-1,运行结果为:[9,8,7,6,5,4]
print(num[1:6:0])#步长为0,抛出异常

在上面的代码中,如果步长为负数,那么开始索引需要大于结束索引,例如num[8:2:-2],表示从索引为8的元素开始,往前扫描,直到索引为2的元素的上一个元素,也就是索引为3的元素为止。
当然,如果使用负数作为步长,还有一些比较复杂的用法,得出这些用法的分片结果。

3、用负数作为分片步长
num=[1,2,3,4,5,6,7,8,9]
print(num[::-3])
print(num[:3:-2])
输出结果:
1、步长为-3,从序列最后一个元素开始,一直到序列第一个元素结束
[9, 6, 3]
2、步长为-2,从序列的最后一个元素开始,一直到索引为4的元素结束
[9, 7, 5]

例5、要求从Python控制台输入一个url和一个数字n,然后对url分片,获取url的Scheme和Host,最后根据这个数字生成一个包含1到n的序列,然后对序列进行两次分片,一次获取序列中的所有奇数,一次获取序列中的所有偶数,并分成两行错位显示。

url=input('请输入一个https网址:')
scheme=url[0:5]
host=url[8:]
print('scheme:',scheme)
print('host',host)
'''
输出结果:
请输入一个https网址:https://geekori.com
scheme: https
host geekori.com
'''


str=input('请输入一个整数:')
n=int(str)
num=range(1,n)
num1=num[0::2]
num2=num[1::2]
for i in num1:
    print(i," ",end='')
print(' ')
print(' ',end='')
for i in num2:
    print(i," ",end='')
 
'''
输出结果:
请输入一个整数:21
1  3  5  7  9  11  13  15  17  19   
 2  4  6  8  10  12  14  16  18  20  
'''

总结

主要介绍分片与索引,分片的几种方式,开始索引与结束索引、负索引、省略索引等

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值