您的位置:首页 > 编程语言 > Python开发

【学神-RHEL7】P4-Python列表操作和字符串的常用方法

2016-01-12 22:35 961 查看
本节所讲内容:

3.3.2 分片
通过分片可以访问序列中一定范围内的元素。
语法:
序列[上边界:下边界]
>>> tag = '<ahref="http://www.python.org">Python web site</a>'
>>> tag
'<ahref="http://www.python.org">Python web site</a>'
>>> tag[32:-4]
'Python web site'

假如用a代表上边界,b代表下边界,x代表序列,则x[a:b]表示的真正的范围应该是
a < x ≤ b 或 a+1 ≤ x < b+1
注:只适用于正数分片
例:
>>> num =[1,2,3,4,5,6,7,8,9,10]
>>> num[3:6]
[4, 5, 6]
>>> num[7:8]
[8]

如果分片所得部分包括序列结尾的元素,只需空置最后一个索引即可
>>> num[-3:]
[8, 9, 10]

同样,如果包含开始的元素,只需空置第一个索引即可
>>> num[:3]
[1, 2, 3]

如果要表示整个序列,两边都进行空置即可
>>> num[:]
[1, 2, 3, 4, 5, 6, 7, 8,9, 10]

例:根据用户输入信息打印出用户访问的域名

#!/usr/bin/env python
url = raw_input("Pleaseenter the URL: ")
domain = url[11:-4]
print "Domain name:%s" % domain

执行结果
[root@localhost ~]#python domain.py
Please enter the URL:http://www.baidu.com
Domain name: baidu

3.3.3 步长控制
分片的默认步长是1,可以手动指定为自己所需要的步长
语法
序列[上边界:下边界:步长]
>>> num[::2]
[1, 3, 5, 7, 9]

>>> num[3:9:3]
[4, 7]

步长可以为负数,此时分片从右到左提取元素
>>> num[9:3:-2]
[10, 8, 6]

3.3.4 序列相加
>>> [1,2,3] +[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'hello' +'world'
'helloworld'

但是列表和字符串无法进行相加
>>> [1,2,2] +'rm'
Traceback (most recentcall last):
File "<stdin>", line 1, in<module>
TypeError: can onlyconcatenate list (not "str") to list

3.3.5 乘法
>>> 'python' * 5
'pythonpythonpythonpythonpython'
>>>[2014,2015,2016] * 3
[2014, 2015, 2016, 2014,2015, 2016, 2014, 2015, 2016]

实例:以正确的宽度在居中的“盒子”内打印一个句子
[root@xuegod163 test]# vim box.py
#!/usr/bin/python
sentence=raw_input("Sentence:")

screen_width = 80
text_width = len(sentence)
box_width = text_width + 20
left_margin = (screen_width -box_width) // 2
left_ident = (box_width -text_width-4) // 2

print
print ' ' * left_margin +'+' + '-' * (box_width-2) + '+'
print ' ' * left_margin + ' '* left_ident + '| ' + ' ' * text_width + ' |'
print ' ' * left_margin + ' '* left_ident + '| ' + sentence + ' |'
print ' ' * left_margin + ' '* left_ident + '| ' + ' ' * text_width + ' |'
print ' ' * left_margin +'+' + '-' * (box_width-2) + '+'
print

3.3.6 成员资格
为了检查一个值是否在序列中,可以使用in运算符
>>> provinces =['HeNan','HeBei','ShanDong','ShanXi','HuNan','HuBei','Jiangxi','Afuhan']
>>> 'AnHui' inprovinces
False
>>> 'HeNan' inprovinces
True

3.3.7 长度、最大值、最小值
长度:len
最大值:max
最小值:min
>>> len('What is yourname?')
18
>>> num =[100,200,300,250]
>>> len(num)
4
>>> max(num)
300
>>> min(num)
100

3.4 列表的基本操作
3.4.1 元素赋值
>>> x = [1,1,1]
>>> x[1] = 2
>>> x
[1, 2, 1]

3.4.2 删除元素
>>> provinces
['HeNan', 'HeBei', 'ShanDong','ShanXi', 'HuNan', 'HuBei', 'Jiangxi', 'Afuhan']
>>> del provinces[-1]
>>> provinces
['HeNan', 'HeBei', 'ShanDong','ShanXi', 'HuNan', 'HuBei', 'Jiangxi']

3.4.3 分片赋值
>>> num = [1,2,3,4,5]
>>> num[3:] = [6,7]
>>> num
[1, 2, 3, 6, 7]

插入新元素
>>> num[3:3] =[4,5]
>>> num
[1, 2, 3, 4, 5, 6, 7]

分片删除
>>> del num[1:4]

>>> num[1:4] =[]
>>> num
[1, 5, 6, 7]

3.4.4 列表的方法
1)追加append
>>> num =[1,2,3]
>>>num.append(4)
>>> num
[1, 2, 3, 4]

2)统计次数count
>>>['to','be','or','not','to','be'].count('to')
2

3)在列表末尾一次性追加另一个列表的多个值extend
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b[1:3])
>>> a
[1, 2, 3, 5, 6]

4)显示列表中某个值第一个匹配项的索引位置index
>>> aaa =['Today','is','a','nice','day']
>>> aaa.index('nice')
3

5)将对象插入到列表中insert
>>> num =[1,2,3,4,5,6]
>>>num.insert(3,'four')
>>> num
[1, 2, 3, 'four', 4, 5, 6]

6)移除列表中的一个元素(默认是最后一个),并且返回该元素的值
>>> x = [1,2,3]
>>> x.pop()
3

7)移除列表中某个值的第一个匹配项remove
>>> x = ['to','be','or','not','to','be']
>>>x.remove('be')

8)将列表中的元素反向存放reverse
>>> x
['to', 'or', 'not', 'to','be']
>>> x.reverse()
>>> x
['be', 'to', 'not', 'or','to']

9)排序sort和sorted
>>> x =[3,7,4,64,23,71,2]
>>> x.sort()
>>> x
[2, 3, 4, 7, 23, 64, 71]

>>> sorted(x)
[2, 3, 4, 7, 23, 64, 71]

两者的区别在于sort不返回生成的列表值,sorted返回列表值

3.5 元组
元组也列表一样,也是一种序列。唯一的不同是元组不能修改。
语法
(元素1,元素2,……,元素n)

空元组可以用没有包含内容的两个圆括号来表示
()

如果要创建包括一个值的元组,必须加上逗号
(42,)

加上逗号和不加逗号代表的含义完全不同

>>> 3*(42)
126
>>> 3*(42,)
(42, 42, 42)

补充1:
格式化字符串的使用方法:
1)%字符:标记转换说明符的开始
2)转换标志(可选):
标志含义
-左对齐
+转换值之前加上正负号
“”空白字符
0转换值若位数不够则用0填充
3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出
4)点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。
5)转换类型
常见类型表
转换类型含义
d转换10进制的数字
f十进制浮点数
r字符串(使用repr转换任意python对象)
s字符串(使用str转换任意python对象)
例1:简单转换
>>> name = '孙悟空'
>>> print '齐天大圣%s' % name
齐天大圣孙悟空

例2:控制字段宽度
>>> print '%30s孙悟空' % name
齐天大圣孙悟空

例3:控制字段精度
针对数字指定小数位数
>>> from mathimport pi
>>> pi
3.141592653589793
>>> print '%.2f'% pi
3.14
针对字符确定最大宽度
>>> name = 'What is your name'
>>> print '%s' % name
What is your name
>>> print '%.10s' % name
What is yo

例3:使用*表示字段的宽度和精度
>>> print '%s' %name
What is your name
>>> print'%*.*s' % (20,10,name)
What is yo

例4:左对齐
>>> print'%-*s%*s' % (30,'Goods',30,'Prices')
Goods Prices

补充2:
常见字符串的方法
1)find
find 方法可以在一个较长的字符串中查找子串。它返回子串所在位置的最左端索引,如果没有找到则返回-1
>>> title ='welcome to hero alliance'
>>>title.find('hero')
11
>>>title.find('heros')
-1

2)lower
lower用来将字符串转换为小写格式(可以在脚本中设置忽略大小写的操作)
>>> name='SunWUKOng'
>>> name.lower()
'sunwukong'

3)title
title用来将字符串转换为标题,每个单词的首字母大写,其他字母小写
>>>title.title()
'Welcome To HeroAlliance'

title处理以下结果是达不到想要效果
>>> hero ="I'm rm"
>>> hero.title()
"I'M Rm"

可以使用插入string模块,使用capwords函数
>>> string.capwords(hero)
"I'm Rm"

4)replace
replace对字符串进行替换,并返回替换后的结果
>>> title
'welcome to heroalliance'
>>>title.replace('alliance','kingdom')
'welcome to hero kingdom'

5)split
split用来将字符串分割成序列,默认以空格作为分隔符,可以手动指定
>>> title.split()
['welcome', 'to', 'hero', 'alliance']
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']

6)strip
strip删除字符串两侧的空格(不包含内部空格),并返回结果
>>> name = raw_input("What is yourname? ").strip()
What is your name? rm
>>> name
'rm'

如果希望创建一个不区分大小写,而且自动去除用户误输入的空格字符的变量,可以通过strip和lower相互结合使用
>>> name = raw_input('What is your name?').strip().lower()
What is your name? RM
>>> name
'rm'

学习过程中如果问题,请留言。更多内容请加:
学神IT-linux讲师-RM老师QQ:2805537762
学神IT-戚老师QQ:3341251313
学神IT-旭斌QQ:372469347
学神IT教育RHEL7交流群:468845589

本文出自 “学神IT教育-讲师MK” 博客,请务必保留此出处http://xuegodlinux.blog.51cto.com/10844319/1734387
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: