[基础] 序列却片

我们为什么需要却片?

[root@DataHacker Desktop]# cat slice.py 
#!/usr/bin/env python

import sys
print sys.argv
[root@DataHacker Desktop]# python slice.py -a -b -c
['slice.py', '-a', '-b', '-c']

但通常,我们只对输入的参数感兴趣,所以:
[root@DataHacker Desktop]# cat slice.py
#!/usr/bin/env python

import sys
print sys.argv[1:]
[root@DataHacker Desktop]# python slice.py -a -b -c
['-a', '-b', '-c']

之后,也只要处理这个参数列表即可

SHELL中的文本却片是怎样的?


[root@DataHacker ~]# str="love python dig mysql"
[root@DataHacker ~]# echo ${str:5:10}
python dig

我们是通过指定字符串的起始位置和长度来生成子串,语法如下:
${variable_name:start_position:length}

Python中字符串却片是怎样的?


作用大抵也是相同,都能够用于分离数据,语法如下:
VAR[X:Y:Z]:表示从X到Y-1,每隔Z元素索引一次,其中,Z是步长也是方向,例如:

In [1]: str = "hello"

In [2]: str[::-1]
Out[2]: 'olleh'

负数表示从右到坐走

那么,list 却片又是怎样的?

>>> # 关于切片的理解,记得一本书上的解释,有助理解,共享!
>>> # 初始一个 list a
>>> a=[1,2,3,4,5,6]
>>> a[5]
6
>>> a[-1]
6
>>> a[0:5]
[1, 2, 3, 4, 5]
>>> a[-1:-2]
[]
>>> a[-2:-1]
[5]
>>> # 我们这样理解,对于 list a
>>> # 元素 1 左侧有 0 号挡板
>>> # 元素 2 左侧有 1 号挡板
>>> # 元素 3 左侧有 2 号挡板
>>> # 元素 4 左侧有 3 号挡板
>>> # 元素 5 左侧有 4 号挡板
>>> # 元素 6 左侧有 5 号挡板
>>> # 进一步:
>>> # 元素 6 左侧有 -1 号挡板
>>> # 元素 5 左侧有 -2 号挡板
>>> # 元素 4 左侧有 -3 号挡板
>>> # 元素 3 左侧有 -4 号挡板
>>> # 元素 2 左侧有 -5 号挡板
>>> # 元素 1 左侧有 -6 号挡板
>>> # 开始
>>> # a[-6:-3],-6板到-3板之间,那就是 元素1左侧 到 元素4左侧,包括:1、2、3,测试下
>>> a[-6:-3]
[1, 2, 3]
>>> # a[:-5], 从0号板开始,到-5号板(元素2左侧),包括:1,测试下
>>> a[:-5]
[1]
>>> # 理解了,OK!

在Python里,list却片与字符串却片哪里不同?


In [3]: L1 = [1,2,3]

In [4]: L2 = L1[:]

In [5]: L2
Out[5]: [1, 2, 3]

In [6]: L1[1] = 5

In [7]: L1
Out[7]: [1, 5, 3]

In [8]: L2
Out[8]: [1, 2, 3]

可见,list却片返回的是一个新的list,我们也可以用 is 验证:
In [9]: L1 is L2
Out[9]: False


list却片的运用


list切片有个比较好的运用,是for循环总是按照元素在list中出现的顺序依次迭代,如果我们想要更改迭代的序列
此时用list切片制作一个副本是个很好的选择,例子:
In [10]: str = ['Python','SQL','SHELL','Perl']

In [11]: for i in str[:]:
   ....:     if len(i) > 3:
   ....:         print i
   ....:         
Python
SHELL
Perl


By DataHacker
2014-2-10
Good Luck!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值