数据类型--索引和切片(字符串、元祖、列表适用)
序列:
字符串,列表,元祖都被称为序列类型数据(可迭代、可被for循环的)
索引和切片的概念:
1、索引同样可以是负数,位置是从序列尾开始计算的。因此,shoplist[-1]表示序列的最后一个元素而shoplist[-2]抓取序列的倒数第二个项目。
2、切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。
注意这与你使用的索引操作十分相似。记住数是可选的,而冒号是必须的。
3、切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片刀那里结束。如果不指定第一个数,python就从序列首开始。如果没有指定第二个数,则python会停止序列尾。
注意:
返回的序列从开始位置开始,刚好在结束位置之前结束。即开始位置是包办在序列切片中的,而结束位置被排斥在切片外。(顾头不顾尾)
shoplist[1:3]返回从位置1开始,包括位置2,但是停止在位置3的一个序列切片,因此返回一个含有两个项目的切片。
shoplist[:]返回整个序列的拷贝。你可以用负数做切片。
负数用在从序列尾开始计算的位置。例如:shoplist[:1]会返回除了最后一个项目包含所有项目的序列切片。
索引:
例如:a='abcde' 每个符号都有自己的一个数据位置,可以通过索引来找到独立的字母位置,在abcde的字母中的数据位置分别为01234。可以使用下面语法进行提取数据位置:
1 >>> a='abcde' 2 3 >>> a[0] 4 'a' 5 6 >>> a[1] 7 'b'
但是当需要提取2个字符串位置的时候这时就会出现报错:
1 >>> a[0][1] 2 3 Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5 IndexError: string index out of range 6 7 8 或者,连续提取两个字母时报错: 9 >>> a[0]a[1] 10 File "<stdin>", line 1 11 a[0]a[1] 12 ^ 13 SyntaxError: invalid syntax
如果想要提取2个字符串位置可以使用 '+'进行连接:
1 >>> a[0]+a[1] 2 'ab'
切片
由于每个字符都有自己的索引,可以通过索引提取字符串的一个范围。
语法:a [ 起始值 :结束值:步长:[方向值(-1)] ]
语法:a [ 从第几位开始:到第几位结束:每隔几位取一次值:[方向值(-1)] ]
1 1、从前面开始取一直到第四位: 2 >>> a[:4] 3 'abcd' 4 5 6 2、从第四个开始取值 7 >>> a[4:] 8 'e' 9 10 11 3、从第二个开始去到最后 12 >>> a[2:] 13 'cde'
步长值
每隔多少个字符取一次值。
语法:a [ 起始值 :结束值:步长:[方向值(-1)] ]
语法:a [ 从第几位开始:到第几位结束:每隔几位取一次值:[方向值(-1)] ]
1 1、每隔1个字符取值 2 >>> a[::1] 3 'abcde' 4 6 2、每隔2个字符取值 7 >>> a[::2] 8 'ace' 9 11 3、每隔3个字符取值 12 >>> a[::3] 13 'ad' 14 16 4、通过负数的方式取值: 17 从倒数第一位取值 18 >>> a[-1] 19 'e' 20 22 5、从倒数第二位取值 23 >>> a[-2] 24 'd' 25 26 >>> a[-4:-1] 27 'bcd'
反向取值
步长不包含本身。需要提前取值。
python默认是从左向右取值。一般不用负数取值,但是如果是反向取值,还是需要用负数。
语法:a [ 起始值 :结束值:步长:[方向值(-1)] ]
语法:a [ 从第几位开始:到第几位结束:每隔几位取一次值:[方向值(-1)] ]
1 >>> a[-1:-3:-1] 2 'ed' 3 4 >>> a[-1:-5:-1] 5 'edcb' 6 7 >>> a[-1:-6:-1] 8 'edcba'