`
linvar
  • 浏览: 254042 次
  • 性别: Icon_minigender_1
  • 来自: 未定
社区版块
存档分类
最新评论

python2.x学习笔记(6)-序列(字符串,列表,元组)

阅读更多
1. 我们要研究这样一些 Python 的类型,它们的成员有序排列的,并且可以通过下标
偏移量访问到它的一个或者几个成员,这类 Python 类型统称为序列,
包括下面这些:字符串(普通字符串和 unicode 字符串),列表,和元组类型。

2. 序列类型操作符
   seq[ind]    获得下标为 ind 的元素
   seq[ind1:ind2]  获得下标从 ind1 到 ind2 间的元素集合(不包括seq[ind2]).
   seq * expr      序列重复 expr 次
   seq1 + seq2     连接序列 seq1 和 seq2
   obj in seq      判断 obj 元素是否包含在 seq 中
   obj not in seq  判断 obj 元素是否不包含在 seq 中

3. 序列的最后一个切片操作是扩展切片操作,它多出来的第三个索引值被用做步长参数:
   seq[ind1:ind2:step]
   >>> seq[::-1] # 可以视作"翻转"操作
   >>> s[::2] # 隔一个取一个的操作

4. 切片索引的语法要比简单的单一元素索引灵活的多。开始和结束素引值可以超过字符串的
长度。

5. 内建函数 list(),str()和 tuple()被用做在各种序列类型之间转换。你可以把它们理解成其他语言里面的类型转换,但是并没有进行任何的转换。这些转换实际上是工厂函数,将对象作为参数,并将其内容(浅)拷贝到新生成的对象中. 所谓浅拷贝就是只拷贝了对对象的索引,而不是重新建立了一个对象!如果你想完全的拷贝一个对象(包括递归,如果你的对象是一个包含在容器中的容器),你需要用到深拷贝


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

7. 序列类型可用的内建函数
   enumerate(iter)
   接受一个可迭代对象作为参数,返回一个 enumerate 对象(同
   时也是一个迭代器),该对象生成由 iter 每个元素的 index 值
   和 item 值组成的元组(PEP 279)
   len(seq)  返回序列的长度
   max(iter,key=None) or max(arg0,arg1...,key=None)
   返回 iter 或(arg0,arg1,...)中的最大值,如果指定了 key,
   这个 key 必须是一个可以传给 sort()方法的,用于比较的回调函数.
   min(iter, key=None) or min(arg0, arg1.... key=None)
   返回 iter 里面的最小值;或者返回(arg0,arg2,...)里面的最小值;
   如果指定了 key,这个 key 必须是一个可以传给sort()方法的,用于比较的回调函数.
   reversed(seq) 接受一个序列作为参数,返回一个以逆序访问的迭代器(PEP 322)
   sorted(iter,func=None,key=None,reverse=False)
   接受一个可迭代对象作为参数,返回一个有序的列表;
   可选参数func,key 和reverse的含义跟 list.sort()内建函数的参数含义一样.
   sum(seq, init=0)
   返回seq和可选参数init的总和,其效果等同于reduce(operator.add,seq,init)
   zip([it0, it1,... itN])
   返回一个列表,其第一个元素是 it0,it1,...
   这些元素的第一个元素组成的一个元组,第二个...,类推.

8. Python 里面单引号和双引号的作用是相同的
   Python 实际上有 3 类字符串.通常意义的字符串(str)和 Unicode 字符串(unicode)实际上都是抽象类 basestring 的子类.这个basestring 是不能实例化的
  
9. 编译时字符串连接
   Python 的语法允许你在源码中把几个字符串连在一起写,以此来构建新字符串:
   >>> foo = "Hello" 'world!'
   >>> foo
   'Helloworld!'

10. 如果把一个普通字符串和一个 Unicode 字符串做连接处理,Python 会在连接操作前先把普通字符串转化为 Unicode 字符串:
>>> 'Hello' + u' ' + 'World' + u'!'
     u'Hello World!'

11. >>> w, p = 'Web', 'page'
    >>> 'http://xxx.yyy.zzz/%s/%s.html' % (w, p)
        'http://xxx.yyy.zzz/Web/page.html'

    >>> 'There are %(howmany)d %(lang)s Quotation Symbols' % \
    ... {'lang': 'Python', 'howmany': 3}
    'There are 3 Python Quotation Symbols'

12. 原始字符串操作符( r/R )
    正则表达式模块re
   

13. Unicode 字符串操作符( u/U )
    用来把标准字符串或者是包含 Unicode 字符的字符串转换成完全地 Unicode 字
符串对象. 另外,字符串方法和正则表达式引擎也支持 Unicode.

14. 注意:Unicode 操作符必须出现在原始字符串操作符前面.
    ur'Hello\nWorld!'

15. 字符串内建函数
  方法                             描述
  string.capitalize()           把字符串的第一个字符大写
  string.center(width)         
  返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
  string.count(str, beg=0,end=len(string))              
  返回 str 在 string 里面出现的次数,
  如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
  string.decode(encoding='UTF-8',errors='strict')
  以 encoding 指定的编码格式解码 string,
  如果出错默认报一个ValueError的异常,
  除非errors指定的是'ignore'或者'replace'
  string.encode(encoding='UTF-8',errors='strict')
  以 encoding 指定的编码格式编码string,
  如果出错默认报一个ValueError 的异常,
  除非 errors 指定的是'ignore'或者'replace'
  string.endswith(obj, beg=0, end=len(string))
  检查字符串是否以 obj 结束,如果 beg 或者 end 指定
  则检查指定的范围内是否以 obj 结束,
  如果是,返回 True,否则返回 False.
  string.expandtabs(tabsize=8)
  把字符串 string 中的 tab 符号转为空格,
  默认的空格数 tabsize 是 8.
  string.find(str, beg=0,end=len(string))
  检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,
  则检查是否包含在指定范围内,如果是返回开始的索引值,
  否则返回-1
  string.index(str, beg=0,end=len(string))
  跟 find()方法一样,只不过如果str 不在 string 中会报一个异常.
  string.isalnum()
  如果 string 至少有一个字符并且所有字符
  都是字母或数字则返回 True,否则返回 False
  string.isalpha()             
  如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
  string.isdecimal()           
  如果 string 只包含十进制数字则返回 True 否则返回 False.
  string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False.
  string.islower()
  如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分
  大小写的)字符都是小写,则返回 True,否则返回 False.
  string.isnumeric() 如果 string 中只包含数字字符,则返回 True,否则返回False
  string.isspace()  如果 string 中只包含空格,则返回 True,否则返回False.
  string.istitle()  如果 string 是标题化的(见 title())则返回 True,否则返回 False
  string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
  string.join(seq) Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
  string.ljust(width)返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
  string.lower() 转换 string 中所有大写字符为小写.
  string.lstrip() 截掉 string 左边的空格
  string.partition(str) 
  有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把字符串string分成一个3元素的元组(string_pre_str,str,string_post_str),
如果 string 中不包含str 则 string_pre_str == string.
  string.replace(str1, str2, num=string.count(str1))
  把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
  string.rfind(str, beg=0,end=len(string))
  类似于 find()函数,不过是从右边开始查找.
  string.rindex( str, beg=0,end=len(string))
  类似于 index(), 不过是从右边开始.
  string.rjust(width)返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
  string.rpartition(str)  类似于 partition()函数,不过是从右边开始查找.
  string.rstrip() 删除 string 字符串末尾的空格.
  string.split(str="", num=string.count(str))
  以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
  string.splitlines(num=string.count('\n')) 按照行分隔,返回一个包含各行作为元素的列表,如果 num 指定则仅切片 num 个行.   
  string.startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内
  string.strip([obj])   在 string 上执行 lstrip()和 rstrip()
  string.swapcase()     翻转 string 中的大小写
  string.title()    
  返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
  string.translate(str, del="")
  根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中
  string.upper() 转换 string 中的小写字母为大写
  string.zfill(width)  
  返回长度为 width 的字符串,原字符串 string 右对齐, 前面填充0

16. 特殊字符串和控制字符
  Python 的三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符. 
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的 WYSIWYG(所见即所得)格式的。

17. Unicode
    Python 里面处理 Unicode 字符串跟处理 ASCII 字符串没什么两样.Python 把硬编码的字符串叫做字面上的字符串,默认所有字面上的字符串都用 ASCII 编码,可以通过在字符串前面加一个'u'前缀的方式声明 Unicode 字符串,这个'u'前缀告诉 Python 后面的字符串要编码成 Unicode字符串 .

18. 内建的 str()函数和 chr()函数并没有升级成可以处理 Unicode.它们只能处理常规的ASCII 编码字符串,如果一个 Unicode 字符串被作作为参数传给了 str()函数,它会首先被转换成ASCII字符串然后在交给str()函数.如果该 Unicode 字符串中包含任何不被 ASCII 字符串支持的字符,会导致 str()函数报异常.同样地,chr()函数只能以 0 到 255 作为参数工作.如果你传给它一个超出此范围的值(比如说一个 Unicode 字符),它会报异常.
     新的内建函数 unicode()和 unichar()可以看成 Unicode 版本的 str()和 chr().Unicode()函数可以把任何 Python 的数据类型转换成一个 Unicode 字符串,如果是对象,并且该对象定义了__unicode__()方法,它还可以把该对象转换成相应的 Unicode 字符串.

19. codec 是 COder/DECoder 的首字母组合.它定义了文本跟二进制值的转换方式,跟 ASCII 那种用一个字节把字符转换成数字的方式不同,Unicode 用的是多字节.这导致了 Unicode 支持多种不同的编码方式. 比如说codec 支持的四种耳熟能详的编码方式是:ASCII,ISO8859-1/Latin-1,UTF-8 和 UTF-16.

20. 每次我们写一个 Unicode 字符串到磁盘上我们都要用指定的编码器给他"编码"一下,
相应地, 当我们从这个文件读取数据时,我们必须"解码"该文件,使之成为相应的 Unicode 字符串对象.

21. 事实上,只要你遵守以下的规则,处理 Unicode 就是这么简单:
a.程序中出现字符串时一定要加个前缀 u.
b.不要用 str()函数,用 unicode()代替.
c.不要用过时的 string 模块 -- 如果传给它的是非 ASCII 字符,它会把一切搞砸。
d.不到必须时不要在你的程序里面编解码 Unicod 字符.只在你要写入文件或数据库或者
网络时, 才调用 encode()函数;相应地, 只在你需要把数据读回来的时候才调用 decode()函数.
分享到:
评论

相关推荐

    Python常用的内置序列结构(列表、元组、字典)学习笔记

    列表可以修改,字符串与元组不可修改。 元组的分片还是元组,列表的分片还是列表。 1.列表方法: name=[zhang3,li4,wang5] name.append(gou6) #添加项 name.remove(gou6) #移除第一个匹配项,也可用del name[3]来...

    Python基础教程学习笔记 第二章 列表和元组

     列表(list)、元组(tuple)、字符串(string)、Unicode 字符串、buffer对象、xrange对象 3、列表和元组的区别:列表可以进行修改,但是元组不行 4、tuple常作为字典的键 5、序列都可以进行以下操作:  索引...

    小甲鱼《零基础入门学习Python》课堂笔记.docx

    了不起的分支和循环3 21 10讲:列表,一个打了激素的数组1 23 11讲:列表,一个打了激素的数组2 25 12讲:列表,一个打了激素的数组3 27 13讲:元组,戴上了枷锁的列表 30 14讲:字符串:各种奇葩的内置方法 32 15讲...

    Python自学笔记 Python核心编程第二版学习笔记 很详细的学习笔记 建议收藏 共148页.pdf

    五、 序列: 字符串, 列表和元组(chapter6) 30 六、 映射和集合类型(chapter7) 41 七、 条件和循环(chapter8) 46 八、 文件和输入输出(chapter9) 49 九、 错误和异常(chapter10) 62 十、 函数和函数式编程(chapter11)...

    Python3入门基础教程.pdf

    Python3⼊门基础教程 ⼊门基础教程 引:此⽂是⾃⼰学习python过程中的笔记和总结,适合有语⾔基础的⼈快速了解python3和没基础的作为学习的⼤纲,了解学习的⽅向、知 识点;笔记是从多本书和视频上学习后的整合版。 ...

    Python中列表、字典、元组数据结构的简单学习笔记

    由于列表是序列,它支持很多与字符串相同的操作。列表对”+”和”*“操作的响应与字符串很相似,两个操作的意思也是合并和重复,只不过是一个新的列表,而不是一个字符串。 >>索引、分片和矩阵 对于列表而言,索引和...

    Python学习笔记(七)——–Python数据结构

    一、相关 数据结构是计算机存储、组织数据的...它分为七种类型:列表、字符串、元组、Unicode字符串、字节数组、缓冲区和xrange对象。常用的是:列表(List)、字符串(String)、元组(Tuple)。 3、映射在Python的

    python(3.5)学习笔记(4)

    序列结果主要有列表、元组、集合、字典和字符串。 1、1 索引 序列中的每个元素都有一个编号,也称索引。 通过索引可以访问序列中的任何元素。 python中有正数索引和负数索引 序列: 1 2 3 4 5 正数索引: 0 1 2 3 4 ...

    Python学习笔记之For循环用法详解

    可迭代对象是每次可以返回其中一个元素的对象, 包括字符串、列表和元组等序列类型,以及字典和文件等非序列类型。还可以使用迭代器和生成器定义可迭代对象 For 循环示例: # iterable of cities cities = ['new york...

    带标签_超详细笔记以及拓展延伸知识点总结_小甲鱼零基础入门学习python系列教程

    笔记_小甲鱼零基础入门学习python系列教程 1 目录 2 序 4 01讲:我和Python的第一次亲密接触 7 02讲:用Python设计第一个游戏 9 03讲:小插曲之变量和字符串 11 04讲:改进我们的小游戏 13 05讲:闲聊之Python的数据...

    【Python】format()格式化输出—学习笔记

    目录一、旧式 % 格式化输出二、format格式化输出定位输出”:”高级输出1、数的格式2、对齐三、向函数中传入序列(除了元组?) 一、旧式 % 格式化输出 a = "a" print("这是一个字符%c" % a) 格式 输出方式 %...

Global site tag (gtag.js) - Google Analytics