1、序列类型
序列类型:成员有序排列,并且可以通过下标偏移量访问到它的一个或者几个成员。
序列包括:字符串(普通字符串和unicode字符串),列表,元组。
2、序列类型转换工厂函数
实例化,也不能被调用
函数 含义
list(iter) 把可迭代对象转换为列表
str(obj) 把 obj 对象转换成字符串(对象的字符串表示法)
unicode(obj) 把对象转换成 Unicode 字符串(使用默认编码)
basestring() 抽象工厂函数,其作用仅仅是为 str 和 unicode 函数提供父类,所以不能被
tuple(iter) 把一个可迭代对象转换成一个元组对象
3、浅拷贝和深拷贝
一旦一个python对象被建立,就不能更改其身份或类型了。若把一个列表对象传给list()函数,便会创建这个对象的一个浅拷贝,然后将其插入新的列表中。浅拷贝只拷贝了对对象的索引,而不是重新建立了一个对象!若想完全的拷贝一个对象(包括递归,如果你的对象是一个包含在容器中的容器),需要进行深拷贝。
非容器类型(数字,字符串和其他原子类型的对象等)没有被拷贝一说,浅拷贝是用完全切片操作来完成的;如果元组变量只包含原子类型对象,对它的深拷贝将不会进行。
浅拷贝和深拷贝都可以在copy模块中找到。copy()进行浅拷贝操作,deepcopy()进行深拷贝操作。
函数名 功能
if myInput[0] not in alphas:
print '''invalid: first symbol must be
alphabetid'''
else:
for otherChar in myInput[1:]:
if otherChar not in alphas + nums:
print '''invalid: remaining
symbols must be alphanumeric'''
break
else:
print 'okey as an identifier'
break
a)如果是数字,执行必要的数字强制类型转换,然后比较
b)如果有一方的元素是数字,则另一方的元素“大”(数字是最小的)
c)否则,通过类型名字的字母顺序进行比较
4、序列类型可用的内建函数
enumerate(iter) 接受一个可迭代对象作为参数,返回一个enumerate对象(同时也是一个迭
代器),该对象生成由iter每个元素的index值和item值组成的元组。
len(seq) 返回seq的长度
max(iter,key=None) or 返回iter或(arg0,arg1,...)中的最大值,如果指定了key,这个key必须
max(arg0,arg1...,key=None) 是一个可以传给sort()方法的,用于比较的回调函数。
min(iter,key=None) or 返回iter或(arg0,arg1,...)中的最小值,如果指定了key,这个key必须
min(arg0,arg1...,key=None) 是一个可以传给sort()方法的,用于比较的回调函数。
reversed(seq) 接受一个序列作为参数,返回一个以逆序访问的迭代器
sort(iter,fun=None,key=None,
reverse=False) 接受一个可迭代对象作为参数,返回一个有序的列表。
sum(seq,init=0) 返回seq和可选参数init的总和
zip([it0,it1,...itN]) 返回一个列表,每个元素为一个元组,元组元素个数为N+1
5、字符串
python中,不区分""和''.
字符串是不可变类型,改变一个字符串的元素需要新建一个新的字符串。由独立的字符组成,这些字符可以通过切片操作顺序访问。
in,not in——只允许用来判断一个单个字符是否属于一个字符串
示例程序一:测试in & not in
>>> 'z' not in 'abc'
True
>>> 'a' in 'abc'
True
>>>
示例程序二:测试string
>>> import string
>>> string.ascii_uppercase # display the upper alphas
'ABCDEFGHIJKLMNOPQRSTUVWX YZ'
>>> string.ascii_lowercase # display the lower alphas
'abcdefghijklmnopqrstuvwx yz'
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwx yzABCDEFGHIJKLMNOPQRSTUV WXYZ' # display all the alphas
>>> string.digits # display the digits
'0123456789'
>>> string.upper('abd') # change the lower alphas to upper
'ABD'
>>> string.lower('AGH') # change the upper alphas to lower
'agh'
>>> 'abc' + 'lala' # connect the two strings
'abclala'
>>> '%s %s' %('aaa', 'bbb') # the other way to connect the two strings
'aaa bbb'
>>> s = ' '.join(('haha', 'heihei', 'hehe'))
>>> s
'haha heihei hehe'
>>>
说明:现在不必导入string模块了。建议不要用string模块。因为python必须为每一个参加连接操作的字符串分配新的内存,包括新产生的字符串。取而代之,使用(%s),然后用一个join()方法把他们连接在一起。
示例程序三:标识符检查(idcheck.py)
import string
alphas = string.letters + '_'
nums = string.digits
print 'Welcome to the Identifier Checker v1.0'
print 'Testees must be at least 2 chars long.'
myInput = raw_input('Identifier to test? ')
if len(myInput) > 1:
注:上述程序可以简化。未考虑标识符长度大于1。未考虑Python关键字。
字符串模板
字符串Template对象有两个方法,substitute()和safe_substitute().前者更为严谨,在key缺少的情况下会报一个KeyError的异常出来,后者在缺少key时,直接原封不动的把字符串显示出来。
示例程序四:测试字符串模板
>>> from string import Template
>>> s = Template('There are ${howmany} ${lang} Quotation Symbols')
>>>
>>> print s.substitute(lang='Python',howmany=3)
There are 3 Python Quotation Symbols
>>>
原始字符串(r/R)
原始字符串目的是对付在字符串中出现的特殊字符,按照字面意思来使用。
示例程序五:测试原始字符串
>>> '\n' # 打印‘\n’
'\n'
>>> print '\n' # 打印一个换行
>>> r'\n' # 打印添加转义字符后的字符串
'\\n'
>>> print r'\n' # 打印原始字符串
\n
>>>
Unicode字符串(u/U)
用来把标准字符串或者包含Unicode字符的字符串转换成完全地Unicode字符串对象。
示例程序六:测试Unicode字符串
6、内建函数
cmp(str1,str2) —— 比较字符串大小
len(str) —— 返回字符串的长度
max(str) min(str) —— 返回最大或最小的字符
enumerate(str) —— 字符串列表形式显示
zip(str1,str2) —— 字符串一和字符串二构成列表
示例程序六:
>>> s = 'abc' # enumerate
>>> for i, t in enumerate(s):
... print i, t
...
0 a
1 b
2 c
>>> s, t = 'abc', '123' # zip
>>> zip(s, t)
[('a', '1'), ('b', '2'), ('c', '3')]
>>>
7、字符串内建函数
示例程序七:字符串内建函数
>>> quest = 'what is your favorite color?'
>>> quest.capitalize() # 首字母大写
'What is your favorite color?'
>>> quest.center(40) # 居中显示,空格填充至长度40的新字符串
' what is your favorite color? '
>>> quest.count('or') # 返回or在字符串中出现次数
2
>>> quest.endswith('blue') # 判断字符串是否以blue结束
False
>>> quest.endswith('color?')
True
>>> quest.find('or', 30) # 检测or是否在字符串中,起始为0,终止为30,是返回位置,否则-1
-1
>>> quest.find('or', 22)
25
>>> quest.index('or', 10) # 检测or是否在字符串中,起始为0,终止为10
16
>>>
8、列表
列表是能保留任意数目的python对象的灵活的容器。可以包含不同类型的对象。列表是可变类型。
内建函数之cmp()比较算法:
1)对两个列表的元素进行比较
2)如果比较的元素是同类型的,则比较其值,返回结果
3)如果两个元素不是同一种类型,则检查他们是否是数字
4)如果有一个列表首先到达末尾,则另一个长一点的列表“大”
5)如果我们用尽了两个列表的元素而且所有元素都是相等的,那么结果就是个平局,返回一个0.
内建函数:
len()
max() min()
sorted() reversed() —— 正向排序和逆向排序
enumerate() zip()
sum()
list() tuple()
列表类型内建函数:
list.append(obj) ——向列表中添加一个对象obj
list.count(obj)—— 返回一个obj在列表中出现次数
list.extend(seq)—— 把序列seq的内容添加到列表中
list.index(obj, i=0, j=len(list))—— 返回list[k] == obj 的k值,并且k的范围在i<=k<j,否则异常
list.insert(index, obj)——在索引量为index的位置插入obj
list.pop(index=-1)—— 删除并返回指定位置的对象,默认是最后一个对象
list.remove(obj)—— 从列表中删除obj
list.reverse()—— 原地翻转列表
list.sort(func=None,key=None,reverse=False) —— 以指定方式排列列表中成员。
9、元组
元组是不可变类型,但可以通过list()函数将不可变的元组转换为可变的列表。
没有明确用符号定义的都是元组。
只有一个元素的元组需要再元组分隔符里面加一个逗号。
>>> onlytuple=('only',)
>>> print onlytuple
('only',)
>>>
圆括号经常被重载。由圆括号包裹的一个单一元素首先被作为分组操作,而不是作为元组的分界符。变通的方法就是如上所示,在第一个元素后面添加一个逗号,来表明这是一个元组而不是在做分组操作。
SRC:http://blog.sina.com.cn/s/blog_76e94d210100wbi9.html