第六章 序列:字符串、列表、元组

一、序列

(1)序列类型操作符

  seq[ind] 获得下标为 ind 的元素

  seq[ind1:ind2] 切片操作

  seq * expr   序列重复 expr 次

  seq1 + seq2   连接序列

  obj in seq   判断 obj 元素是否包含在 seq 中

  obj not in seq   判断 obj 元素是否不包含在 seq 中
(2)内建函数

类型转换(工厂)函数:

  list(iter) 把可迭代对象转换为列表

  str(obj) 把 obj 对象转换成字符串(对象的字符串表示法)

  unicode(obj) 把对象转换成 Unicode 字符串(使用默认编码)

  basestring() 抽象工厂函数,其作用仅仅是为 str 和 unicode 函数提供父类,所以不能被实例化,也不能被调用

  tuple(iter) 把一个可迭代对象转换成一个元组对象
操作函数:

  enumerate(iter)  接受一个可迭代对象作为参数,返回一个 enumerate 对象(同时也是一个迭代器),该对象生成由 iter 每个元素的 index 值 和 item 值组成的元组(PEP 279)
  len(seq) 返回 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)  接受一个序列作为参数,返回一个以逆序访问的迭代器
  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,...这些元素的第一个元素组成的一个元组,第二个...,类推.

二、字符串

1 字符串操作符

  索引操作符:

    正向索引

    反向索引:索引从-1开始,向字符串开始的方向计数!

  

  成员操作符:

    in

    not in

  

   格式化操作符%

  

   字符串模板

     举例:

      >>> 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'
      >>> r'\n'
      '\\n'

      

      >>> print '\n'
      

      >>> print r'\n'
      \n

2 内建函数

    cmp()

    len()

    max() 和 min()

    enumerate():

      >>> s='foobar'

      >>> for i, t in enumerate(s):

        print i, t

      0 f

      1 o

      ...

    zip():

      >>> s, t = 'foa', 'obr'
      >>> zip(s, t)
      [('f', 'o'), ('o', 'b'), ('a', 'r')]
    

    isinstance():

      >>>isinstance( 'hello world', str )

      True  

      >>>isinstance( 'hello world', unicode )

      False

    chr(),unichr(),ord():

      chr() 整数做参数,返回对应的ASCII字符

      unichr() 整数做参数,返回对应的unicode字符

      ord() 是上面两个函数的配对函数,反作用

    

    字符串类型内建函数:

      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.isupper() 如果 string 中包含至少一个区分大小写的字符, 并且所有这些(区分 大小写的)字符都是大写,则返回 True,否则返回 False

      string.isnumeric() 如果 string 中只包含数字字符,则返回 True,否则返回 False

      string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False.

      string.istitle() 如果 string 是标题化的(见 title())则返回 True,否则返回 False

      string.join(seq) Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素 (的字符串表示)合并为一个新的字符串

      string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

      string.lower() 转换 string 中所有大写字符为小写.

      string.upper() 转换 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.zfill(width) 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充 0

  

3 字符串的独特特性

  (1)三引号

    Python 的三引号就是为了解决这个问题的, 它允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符:

      >>> hi = '''hello

      ... there'''

      >>> hi

      'hi\nthere'

  (2)字符串不变性

    因为python解释器替你管理内存,所以你根本不需要知道底层发生了什么,每次当你修改一个字符串或者改变字符串内容时,python都会为你分配一个新串

4 Unicode

三、列表

1 列表基础

  创建: aList = [1,2,3,'abc']

  访问:下标或切片

  更新:下标、append()追加

  删除列表元素:del aList[1]、 remove(某个元素值)、pop()

2 操作符

标准类型操作符:

  > < ==

序列类型操作符:

  下标、切片:list[1]、list[1:3]

  成员关系操作:in、not in

  连接操作符:+

    等效果函数:extend():

      两种方式的区别在于+实际上是新建了一个列表而extend()函数是把新列表添加到原有的列表里面了

  重复操作符:*

  注:python的列表也支持符合赋值操作符

列表类型操作符和列表解析:

  >>>[ i*2 for i in [8,-2,5] ]

  [16,-4,10]

  >>>[ i for i in range(8) if i%2==0 ]

  [0,2,4,6]

3 内建函数

  cmp()

  len()

  max() min()

  sorted() reversed()

    例子 :

      >>> s = ['They', 'stamp', 'them', 'when', "they're", 'small']

      >>> sorted(s)
      ['They', 'small', 'stamp', 'them', "they're", 'when']
      解释:字符串排序使用的是字典序,而非字母序(字母'T'的ASCII码值比字母'a'靠前)

  enumerate() 和 zip()

    >>> albums = ['tales', 'robot', 'pyramid']
    >>> for i, album in enumerate(albums):
    0 tales

    1 robot

    2 pyramid

  sum()

  list() 和 tuple(): 列表和元组之间的转换函数

4 列表类型的内建函数

  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;否则 引发 ValueError 异常.

  list.insert(index, obj) 在索引量为 index 的位置插入对象 obj.

  list.pop(index=-1)a 删除并返回指定位置的对象,默认是最后一个对象

  list.remove(obj) 从列表中删除对象 obj

  list.reverse() 原地翻转列表

  list.sort(func=None,key=None,reverse=False) 以指定的方式排序列表中的成员,如果 func 和 key 参数指定, 则按照指定的方式比较各个元素,如果 reverse 标志被置为 True,则列表以反序排列.

四、元组

 1 元组基础

  创建:aTuple = (1,2,'abc')

  访问: 下标、切片

  更新:元组同字符串一样是不可变类型!不能更新或者改变元组的元素,只能构造一个新元组

  删除:不能删除元组元素,但可以重组或者再造!

2 操作符和内建函数

  创建,重复*,连接+,in not in,切片, < > ==

  len() max() min() cmp() list() tuple() str()

3 元组的特殊特性

(1)元组也不是那么地“不可变”

  虽然元组对象本身是不可变的,但这并不意味着元组包含的可变对象也不可变了:

  >>> t = (['xyz', 123], 23, -103.4)
  >>> t
  (['xyz', 123], 23, -103.4)
  >>> t[0][1]
  123
  >>> t[0][1] = ['abc', 'def']
  >>> t
  (['xyz', ['abc', 'def']], 23, -103.4)

(2)默认集合类型
  >>> 'abc', -4.24e93, 18+6.6j, 'xyz'
  ('abc', -4.24e+093, (18+6.6j), 'xyz')

(3)单元组元组

  创建一个只有一个元素的元组是行不通的:

  >>> ('xyz')
  'xyz'
  >>> type(('xyz')) # a string, not a tuple
  <type 'str'> #是一个字符串而非一个元组 !

  因为:由圆括号包裹的一个单一元素首 先被作为分组操作,而不是作为元组的分界符
(4)字典的关键字

  不可变对象的值是不可改变的。这就意味着它们通过 hash 算法得到的值总是一个值。这是 作为字典键值的一个必备条件。键值必须是可哈希的对象,元组变量符合此标准,而列表变量不行

五、深拷贝与浅拷贝

序列类型对象的浅拷贝是默认类型拷贝,并可以以下几种方式实施:

  (1)完全切片操作[:],

  (2) 利用工厂函数,比如 list(),dict()等,

  (3)使用 copy 模块的 copy 函数.

深拷贝:需要copy.deepcopy()函数!

几点关于拷贝操作的警告:

   第一:非容器类型(比如数字,字符串和其他"原子"类型的 对象,像代码,类型和 xrange 对象等)没有被拷贝一说,浅拷贝是用完全切片操作来完成的.

   第二:如果元组变量只包含原子类型对象,对它的深拷贝将不会进行

  

    

Python核心编程读笔 5: python的序列的更多相关文章

  1. Python核心编程读笔 13:执行环境

    第14章  执行环境 一.可调用对象 python有四种可调用对象:函数.方法.类.一些类的实例 1 函数 (1)内建函数(BIF) BIF是用c/c++写的,编译后放入python解释器,然后把它们 ...

  2. Python核心编程读笔 11:模块

    第12章 模块 1.基本概念 模块的文件名就是模块名字.py 每个模块都定义了自己唯一的名称空间 模块的搜索路径:会被保存在 sys 模块的 sys.path 变量里 >>>sys. ...

  3. Python核心编程读笔 12:OOP

    第13章 面向对象编程 一.基本概念 1.object类是所有类的基类,如果你的类没有继承任何其他父类,object 将作为默认的父类. 2.python创建实例时无需new: myFirstObje ...

  4. Python核心编程读笔 10:函数和函数式编程

    第11章 函数和函数式编程 一 调用函数  1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...

  5. Python核心编程读笔 1

    第一章 欢迎来到Python世界 1 Python特点: 高级的可进行系统调用的解释性语言 面向对象 可升级.扩展.移植 自动内存管理器(内存管理由Python解释器负责) 2 安装 Windows的 ...

  6. Python核心编程读笔 8: 文件和输入输出

    第九章 文件和输入输出 一.文件内建函数.方法.属性 1 文件内建函数 file_object = open(file_name, access_mode='r', buffering=-1) 工厂函 ...

  7. Python核心编程读笔 7: 条件和循环

    第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...

  8. Python核心编程读笔 6: 映射和集合类型

    第七章 映射和集合能力 一 字典(python中唯一的映射类型) 1 基本 创建和赋值: 正常创建:>>>dict = {'name':'earth', 'port':80} 用工厂 ...

  9. Python核心编程读笔 4

    第五章 数字 二.整形 1 布尔型 2 标准整数类型 3 长整型 数字后面加L,能表示非常非常大的数字 目前,整形和长整型逐渐统一!!! 三.双精度浮点数 四.复数 有关复数的几个概念: 表示虚数的语 ...

随机推荐

  1. C / C++算法学习笔记(8)-SHELL排序

    原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...

  2. VS2012 黑色护眼主题

    在黑色主题基础上,更改了字体 Ms Comic Sans 字号也增大了 附件中有两个 一个是原版主题下载自https://studiostyl.es/ 第二个是如下改完后的主题 vssettings. ...

  3. C#中in,out,ref,params的作用和区别

    ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键 ...

  4. WinCmd

    Q1:tracert Tracert (跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径. Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定 ...

  5. C++ Primer第18章Vector的再实现及bug修正

    C++Primer第18.1.2节在介绍allocator类的时候,给了一个仿照标准库中vector的例子.感觉示例代码非常好,但是本人发现了一个bug,与大家共享. 按照作者的示例程序,编译程序时总 ...

  6. 汽车总线obd模拟器,obd仿真器,ecu模拟器,obd开发测试工具,可以模拟ecu中的obd协议 MRD-5050

    汽车总线OBD模拟器MRD-5050型号是在车辆越来越趋于网络化的趋势下研发的,是汽车产品开发.调试.生产必备的工具,能为为开发人员节省大量的时间.当前车辆上的总线设备越来越多,有的高端车上甚至多到有 ...

  7. QTcpSocket 及 TCP粘包分析

    ----我的生活,我的点点滴滴!! 这两天用Qt简单的实现一个tcp多线程client,在此记录下知识. 一.长连接与短连接 1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开 ...

  8. vc++深入跟踪MFC程序的执行流程

    在MFC程序设计的学习过程中最令人感到难受,甚至于有时会动摇学习者信心的就是一种对于程序的一切细节都没有控制权的感觉.这种感觉来源于学习者不知道一个MFC程序是如何运行起来的(即一个MFC程序的执行流 ...

  9. egret随笔-publish命令的改进

    缘由 导了几天的ipa,每次publish后都要改zip包名的代码,终于鼓起勇气翻看了一下egret publish的代码,唉,这代码...应该不会是北京的那几个大牛写的吧??? 正题 看了源码才知道 ...

  10. Xcode7.3.1真机调试ios10

    如果自己的ios测试机不小心升级到比Xcode更高的ios系统, 那么这时候是无法使用真机来进行调试的. 但是我们可以通过拷贝与测试机一样版本的系统来解决这个问题. 去下载一个Xcode8,然后安装, ...