快乐学习
前程无忧、中华英才非你莫属!

Day4-人生苦短我学python

三、字符串的操作

3.1基本字符串操作 

基本字符串操作 

所有标准序列的操作(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)对字符串同样适用。唯一不同是字符都是不可变的

3.2字符串格式化:精简版 字符串格式化使用字符串格式化操作符即百分号%来实现 

示例如下:

>>> format = "hello,%s,%s enough for ya?"
>>> values = ('World','Hot')
>>> print format % values
hello,World,Hot enough for ya?

>>> format = "Pi with three decimals:%.3f"#格式化浮点数
>>> from math import pi
>>> print format % pi
Pi with three decimals:3.142

3.3字符串格式化:完整版 

示例:

>>> '%s plus %s equals %s' %(1,1,2)
'1 plus 1 equals 2'
>>> #如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以避免出错

3.3.1简单转换 

简单的转换只需要写出转换类型,使用起来很简单

>>> from math import pi
>>> 'Pi:%f...' % pi
'Pi:3.141593...'

3.3.2字符宽度和精度

>>> '%10f' % pi #字段宽10
'  3.141593'
>>> '%10.2f' % pi #字段宽10,精度2
'      3.14'
>>> '%.2f' % pi #精度2
'3.14'
>>> '%.5s' % 'Guido van Rossum'
'Guido'

3.3.3 符号、对齐和用0填充

>>> '%010.2f' % pi
'0000003.14'
>>> print ('% 5d' % 10) + '\n' + ('% 5d' % -10)
   10
  -10
>>> #而空白意味着在正数前加上空格。这在需要对齐正负数时会很有用
>>> print ('%+5d' % 10) + '\n' + ('%+5d' % -10)
  +10
  -10
>>> #加号,它表示不管是正数还是负数都标示出符号(同样是在对齐时很有用)

3-1 字符串格式化示例

#使用给定的宽度打印格式化之后的价格列表

width = input('Please enter width: ')

price_width = 10
item_width = width - price_width

header_format = '%-*s%*s'
format = '%-*s%*.2f'

print '=' * width

print header_format % (item_width, 'Item', price_width, 'Prce')

print '-' * width

print format % (item_width, 'Apples',price_width,0.4)
print format % (item_width, 'Pears',price_width,0.5)
print format % (item_width, 'Cantaloupes',price_width,1.92)
print format % (item_width, 'Dried Apricots(16 oz.)',price_width,8)
print format % (item_width, 'Prunes(4 lbs.)',price_width,12)

运行效果

Please enter width: 35
===================================
Item                           Prce
-----------------------------------
Apples                         0.40
Pears                          0.50
Cantaloupes                    1.92
Dried Apricots(16 oz.)         8.00
Prunes(4 lbs.)                12.00

3.4字符串方法 

3.4.1 find 

find方法可以在一个较长的字符串中查找子串。它返回子串所在位置的最左端索引。如果没有找到则返回-1

>>> title = "Monty Python's Flying Circus"
>>> title.find('Monty')
0
>>> title.find('Python')
6
>>> title.find('Flying')
15

3.4.2 join

>>> seq = ['1','2','3','4','5']
>>> sep = '+'
>>> sep.join(seq)
'1+2+3+4+5'
>>> dirs = '','usr','bin','env'
>>> '/'.join(dirs)
'/usr/bin/env'

3.4.3 lower 

lower方法返回字符串的小写字母版

>>> 'Trondheim Hammer Dance'.lower()
'trondheim hammer dance'

3.4.4 replace

>>> 'This is a test'.replace('is','eez')
'Theez eez a test'

3.4.5 split

>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']

3.4.6 strip 

strip方法返回去除两侧(不包括内部)空格的字符串

>>> name = '  Nick Feng  '
>>> name.strip()
'Nick Feng'

3.4.7 translate

translate方法和replace方p一样,可以替换字符串的某些部分,但和前者不同的是translate只处理单个字符,它的优势在于同时进行多个替换,有时候比replace要效率高!

下面是个很简单的例子:假设需要将纯正英文文本转换为带有德国口音版本的,需要把字符 c  替换为 k 把 s 替换成 z

>>>import string
>>>table = string.strmaketrans('cs','kz')
>>>"this is a test".translate(table)
'thiz iz a tezt'

四、字典详解

通过键引用值的数据结构叫映射,字典是Python中唯一的自建映射类型。

字典的使用

>>> phonebook['Cecil']
3518

创建和使用字典

通过如下方式可以直接创建字典:

>>> phonebook = {'Alice':'2301', 'Beth':'9012','Cecil':'3258'}

dict函数

可以通过dict函数创建字典,如下是两种创建方式:

>>> items = [('name', 'Gubby'), ('age', 42)]
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'Gubby'}
>>> items = [('name', 'Gubby'), ('age', 42)]
>>> d= dict(name='Gubby', age=42)
>>> d
{'age': 42, 'name': 'Gubby'}

基本字典操作

字典行为跟序列很类似:

  • len(d) 返回字典中键值对的数量。
  • d[k] 返回关联到键k的值。
  • d[k] = v 将v值映射到k上。
  • del d[k] 删除键为k的项。
  • k in d 检查d中是否有键为k的项目。

但又有一些重要的差别:

  • 键类型 不一定是整数类型,也可能是其他不可变类型。
  • 自动添加 键最初是不存在的,为它分配以后才有。
  • 成员资格 kind查找键,vinl查找值。

 #键的类型:字典的键可以是整型,浮点型(实型),字符串或元组. 字典的键可以是任何不可变类型.

#在字典中检查键的成员资格比在列表中检查值的成员资格更有效,数据结构的规模越大,两者的效率差距越明显

本书给出了一个电话本的例子程序,输入输出结果如下图所示,当做练习稍微思考下如果自己实现会如何做:

代码:

people = {
    'Alice': {
        'phone': '2341',
        'addr': 'Foo drive 23'
    },
    'Beth': {
        'phone': '9102',
        'addr': 'Bar street 42'
    },
    'Cecil': {
        'phone': '3158',
        'addr': 'Baz avenue 90'
    }
}

labels = {
    'phone': 'phone number',
    'addr': 'address'
}

name = raw_input("What's your name?")
request = raw_input("Phone(p) number or address(a)?")

if request == 'p':
    key = 'phone'

if request == 'a':
    key = 'address'

if(name in people):
    print "%s's %s is %s" % (name, key, people[name][key])

运行结果

用字典来格式化字符串

如下例,出了增加括号括起来的键以外,其他部分还是一样的工作:

>>> phonebook = {'Alice':  '2341'}
>>> print "Alice's phone is: %(Alice)s" % phonebook

Alice's phone is: 2341

注意:这类字符串格式户在模板中使用非常多。

字典方法

  • clear() :清除字典中的所有项

如果可以通过将字典直接指向 {},为什么还会需要clear方法呢,如下的例子也许能够说明原因:

>>> x = {}
>>> y = x
>>> x['name'] = 'Joey'
>>> y
{'name': 'Joey'}
>>> x = {}
>>> y
{'name': 'Joey'}
>>> x.clear()
>>> y
{}

如果有过编程经验对于上述代码中,使用x={}和x.clear()的差别应该容易理解。否则,一定要花些时间理解下指针 或 对象引用值引用的概念。

  • copy()  :返回一个具有相同键值对的新字典。

该方法实现的是浅复制,要理解如下例子还是要看上述所提到的对象引用和值引用的差别:

>>> x = {'usrename':'admin', 'machines': ['foo', 'bar', 'haz']}
>>> y = x.copy()
>>> y['username'] = 'root'
>>> y['machines'][1] = 'par'
>>> x
{'usrename': 'admin', 'machines': ['foo', 'par', 'haz']}
>>> y
{'username': 'root', 'usrename': 'admin', 'machines': ['foo', 'par', 'haz']}

要实现深复制,要通过from copy import deepcopy来引入deepcopy方法。

  • fromkeys() ,使用给定的键,建立新的字典。

可以通过所给定的键来建立字典,当然你也可以通过给定第二个参数来指定默认值:

>>> {}.fromkeys(['name', 'age'])
{'age': None, 'name': None}
>>> {}.fromkeys(['name', 'age'], 'unknow')
{'age': 'unknow', 'name': 'unknow'}
  • get() 访问字典的方法,访问字典中不存在的项时,不会报错会返回:“none”,并且可以自定义“默认值” none。

代码区

 >>> d={}
 >>> print d['name']

 Traceback (most recent call last):
   File "<pyshell#1>", line 1, in <module>
     print d['name']
 KeyError: 'name'
 >>> print d.get['name']

 Traceback (most recent call last):
   File "<pyshell#2>", line 1, in <module>
     print d.get['name']
 TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'
 >>> print d.get('name')
 None
 >>> d.get('name','N/A')
 'N/A'
 >>> d['name']='Eric'
 >>> d.get('name')
 'Eric'

  • has_key() :可以检查字典中是否含有特定键

>>> d={}
 >>> d.has_key('name')
 False
>>> d['name']='Eric'
 >>> d.has_key('name')
 True

  • items和iteritems   将字典中所有的项以列表方式返回!

>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> d.items()
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]
>>> it = d.iteritems()
>>> it
<dictionary-itemiterator object at 0x1005dbc00>
>>> list(it)
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]

  • keys和iterkeys   将字典中的键以列表形式返回、而iterkeys则返回针对键的迭代器。
>>> keys = d.keys()
['url', 'spam', 'title']
>>> it = d.iterkeys()
>>> list(it)
['url', 'spam', 'title']
  • pop()  用于获得给定键的值,然后将这个键值对从字典中移除。
>>> d = {'one':1, 'two': 2}
>>> d.pop('one')
1>>> d
{'two': 2}
  • popitem() 类似于list.pop,后者会弹出列表的最后一个元素,但不同的是popitem弹出的是随即项,因为字典中没有:“最后的元素” 和顺序的概念!因为字典是无序的,类似于append方法是没有任何意义的!
>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> d.popitem()
('url', 'http://www.python.org')
>>> d
{'spam': 0, 'title': 'Python Web Site'}
  • setdefault()

setdefault相比较之前的get方法是很类似的,差别呢其实从名字上也能区分出来,一个是改变了获取到的结果,一个是改变了字典的内容然后才去获取字典的值:

>>> d = {}
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name'] = 'goddy'
>>> d
{'name': 'goddy'}

  • update()

update方法可以利用一个字典来更新另外一个字典的内容。

>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> x = {'title': 'Python Langulage'}

>>> d.update(x)

>>> d
{'url': 'http://www.python.org', 'spam': 0, 'title': 'Python Langulage'}
  • values和itervalues()

values方法以列表的形式返回字典的值(itervalues 返回值的迭代器),与返回键不同的是,返回值的列表可以包含重复的元素。

>>>d = {'one':1, 'two': 2,  'three': 2}
>>>d.values()
[2, 2,1]

打赏

未经允许不得转载:同乐学堂 » Day4-人生苦短我学python

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

特别的技术,给特别的你!

联系QQ:1071235258QQ群:226134712
error: Sorry,暂时内容不可复制!