2.3列表
2.3.1list函数
>>> list('hello')
['h', 'e', 'l', 'l', 'o']
2.3.2基本的列表操作
1.改变列表:元素赋值
>>> x=[1,1,1]
>>> x[1]=2
>>> x
[1, 2, 1]
2.删除元素
>>> names=['alice','beth','cecil','dee-dee','earl']
>>> del names[2]
>>> names
['alice', 'beth', 'dee-dee', 'earl']
3.分片赋值
>>> name=list('Perl')
>>> name
['P', 'e', 'r', 'l']
>>> name[2:]=list('ar')
>>> name
['P', 'e', 'a', 'r']
可以使用与原序列不等长的序列将分片替换:
>>> name=list('Perl')
>>> name[1:]=list('ython')
>>> name
['P', 'y', 't', 'h', 'o', 'n']
可以在不需要替换任何原有元素的情况下插入新的元素
>>> numbers=[1,5]
>>> numbers[1:1]=[2,3,4]
>>> numbers
[1, 2, 3, 4, 5]
2.3列表方法
1.append
>>> lst=[1,2,3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
2.count
>>> ['to','be','or','not','to','be'].count('to')
2
>>> x=[[1,2],1,1,[2,1,[1,2]]]
>>> x.count(1)
2
>>> x.count([1,2])
1
3.extend
>>> a=[1,2,3]
>>> b=[3,4,5]
>>> a.extend(b)
>>> a
[1, 2, 3, 3, 4, 5]
>>> a=a+b效果相同
4.index
>>> knights=['we','are','the','knights','who','say','ni']
>>> knights.index('who')
4
>>> knights[4]
'who'
5.insect
>>> numbers=[1,2,3,5,6,7]
>>> numbers.insert(3,'four')
>>> numbers
[1, 2, 3, 'four', 5, 6, 7]
6.pop
移除列表中的一个元素,默认是最后一个
>>> x=[1,2,3]
>>> x.pop()
3
>>> x
[1, 2]
7.remove
>>> x=['to','be','or','not','to','be']
>>> x.remove('be')
>>> x
['to', 'or', 'not', 'to', 'be']
8.reverse
>>> x=[1,2,3]
>>> x.reverse()
>>> x
[3, 2, 1]
9.sort
>>> x=[4,5,3,1,7]
>>> x.sort()
>>> x
[1, 3, 4, 5, 7]
>>> x=[4,5,3,1,7]
>>> y=x[:]
>>> y.sort()
>>> x
[4, 5, 3, 1, 7]
>>> y
[1, 3, 4, 5, 7]
>>> y=x.sort()
>>> print y
None
应该是:
>>> x=[4,5,3,1,7]
>>> y=x[:]
>>> y.sort()
>>> x
[4, 5, 3, 1, 7]
>>> y
[1, 3, 4, 5, 7]
获取已排序的列表副本:
>>> x=[4,5,3,1,7]
>>> y=sorted(x)
>>> x
[4, 5, 3, 1, 7]
>>> y
[1, 3, 4, 5, 7]
10.高级排序
compare(x.y)函数会在x<y时返回负数,在x>y时返回正数,如果x=y则返回0
>>> cmp(40,33)
1
>>> cmp(33,40)
-1
>>> numbers=[5,2,9,7]
>>> numbers.sort(cmp)
>>> numbers
[2, 5, 7, 9]
2.4元组:不可变序列
如果你用逗号分隔了一些值,那么你就自动创建了元组。
>>> 1,2,3
(1, 2, 3)
>>> ()#空元组
()
2.4.1tuple函数
tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转换
为元组。
>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple('abc')
('a', 'b', 'c')
2.4.2基本元祖操作
大致和序列类似
2.4.3元组的意义
元组可以在映射(和集合的成员)中当作键使用—而列表则不行
元组作为很多内建函数和方法的返回值存在,也就是说你必须对元组进行处理
。只要不尝试修改元组,那么,“处理”元组在绝大多数情况下就是把它们当
作列表来进行操作(除非需要使用一些元组没有的方法,例如index和count一般
来说,列表可能更能满足对序列的所有需求。
2.5小结
cmp(x, y)比较两个值
len(seq)返回序列的长度
list(seq)把序列转换成列表
max(args)返回序列或者参数集合中的最大值
min(args)返回序列或者参数集合中的最小值
reversed(seq)对序列进行反向迭代
sorted(seq)返回已排序的包含seq所有元素的列表
tuple(seq)把序列转换成元组
--------------------------------------------------------------
3.1基本字符串操作
字符串都是不可变的
>>> website='http://www.baidu.com'
>>> website[-3]='com'
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'str' object does not support item assignment
3.2字符串格式化:精简版
字符串格式化使用字符串格式化操作符即百分号名来实现。
在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。可
以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或者字典
>>> format="hello, %s,%s enough for ya?"
>>> values=('world','hot')
>>> print format %values
hello, world,hot enough for ya?
模板字符串
>>> from string import Template
>>> s=Template('$x,glorious $x!')
>>> s.substitute(x='slum')
'slum,glorious slum!'
3.3字符串格式化:完整版
如果右操作数是元组的话,则其中的每一个元素都会被单独格式化,每个值都
需要一个对应的转换说明符。
基本的转换说明符:
(1)%字符:标记转换说明符的开始。
(2)转换标志(可选):一表示左对齐,十表示在转换值之前要加上正负号,“”(空白字符)表示正数之前保留空格,0表示转换值若位数不够则用0填充。
(3)最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。
(4)点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。
(5)转换类型
d .i带符号的十进制整数
o不带符号的八进制
u不带符号的十进制
x不带符号的十六进制(小写)
X不带符号的十六进制(大写)
e科学计数法表示的浮点数(小写)
E科学计数法表示的浮点数(大写)
f.F十进制浮点数
g如果指数大于一或者小于精度值则和e相同,其他情况与f相同
G如果指数大于一或者小于精度值则和〔相同,其他情况与F相同
C单字符(接受整数或者单字符字符串)
r字符串(使用repr转换任意Python对象)
s字符串(使用thon对象)
3.3.1简单转换
>>> 'Price of eggs:$%d'%42
'Price of eggs:$42'
>>> from math import pi
>>> 'Pi:%f...'% pi
'Pi:3.141593...'
>>> 'Using str:%s' % 42L
'Using str:42'
3.3.2字段宽度和精度
转换说明符可以包括字段宽度和精度。字段宽度是转换后的值所保留的最小字
符个数,精度(对于数字转换来说)则是结果中应该包含的小数位数,或者(对于
字符串转换来说)是转换后的值所能包含的最大字符个数。这两个参数都是整数
(首先是字段宽度,然后是精度),通过点号(.)分隔。虽然两个都是可选的参数
,但如果只给出精度,就必须包含点号:
>>> '%10f'% pi#字段宽10
' 3.141593'
>>> '%10.2f'% pi#字段宽10,精度2
' 3.14'
>>> '%.2f'% pi#精度2
'3.14'
>>> '%.5s' % 'Guide van Rossum'
'Guide'
3.3.3符号、对齐和0填充
在字段宽度和精度值之前还可以放置一个“标表”,该标表可以是零、加号、
减号或空格。零表示数字将会用0进行填充。
>>> '%010.2f'% pi#010作为字段宽度说明符,表示字段宽度为10,用0进行填
充空位
'00000003.14'
减号(-)用来左对齐数值:
>>>'%-10.2f' % pi
3.14
空白(“”)意味着在正数前加上空格。
>>>print('% 5d' % 10)+'\n'+('% 5d' %-10)F
10
-10
最后说说加号(+),它表示不管是正数还是负数都标示出符号
>>>print('% +5d' % 10)+'\n'+('% 5d' %-10)F
10
-10
字符串格式化示例
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,'Price')
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)
print'-'*width
运行结果
Please enter width:35
===================================
Item Price
-----------------------------------
Apples 0.40
Pears 0.50
Cantaloupes 1.92
Dried Apricots (16 oz.) 8.00
Prunes (4 lbs.) 12.00
-----------------------------------