Python核心编程之序列

来源:互联网 发布:seo 快速收录 编辑:程序博客网 时间:2024/05/18 15:53
1、序列类型
序列类型:成员有序排列,并且可以通过下标偏移量访问到它的一个或者几个成员。
序列包括:字符串(普通字符串和unicode字符串),列表,元组。

2、序列类型转换工厂函数
函数                  含义 
list(iter)       把可迭代对象转换为列表 
str(obj)         把 obj 对象转换成字符串(对象的字符串表示法) 
unicode(obj)     把对象转换成 Unicode 字符串(使用默认编码) 
basestring()     抽象工厂函数,其作用仅仅是为 str 和 unicode 函数提供父类,所以不能被
                 实例化,也不能被调用 
tuple(iter)      把一个可迭代对象转换成一个元组对象 

3、浅拷贝和深拷贝
    一旦一个python对象被建立,就不能更改其身份或类型了。若把一个列表对象传给list()函数,便会创建这个对象的一个浅拷贝,然后将其插入新的列表中。浅拷贝只拷贝了对对象的索引,而不是重新建立了一个对象!若想完全的拷贝一个对象(包括递归,如果你的对象是一个包含在容器中的容器),需要进行深拷贝。
    非容器类型(数字,字符串和其他原子类型的对象等)没有被拷贝一说,浅拷贝是用完全切片操作来完成的;如果元组变量只包含原子类型对象,对它的深拷贝将不会进行。
    浅拷贝和深拷贝都可以在copy模块中找到。copy()进行浅拷贝操作,deepcopy()进行深拷贝操作。

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
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase     # display the lower alphas
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'   # 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:
  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

注:上述程序可以简化。未考虑标识符长度大于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)如果两个元素不是同一种类型,则检查他们是否是数字
  a)如果是数字,执行必要的数字强制类型转换,然后比较
  b)如果有一方的元素是数字,则另一方的元素“大”(数字是最小的)
  c)否则,通过类型名字的字母顺序进行比较
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
0 0
原创粉丝点击