zoukankan      html  css  js  c++  java
  • python序列类型:str、bytes、 bytearray、 list、 tuple、 range

    python中,序列类型有str、bytes、 bytearray、 list、 tuple、 range。所谓序列,说明是有序的,可以通过索引做一些特定的操作。首先先了解序列对象中比较重要的两个:str 和 list,然后探讨下序列对象的共有操作。

    字符串:str

    Python中的文本数据由str对象或字符串处理。 字符串是Unicode编码(从python3开始)的不可变序列。可以通过把字符序列通过单引号、双引号、三引号来创建字符串。例如:

    # Python 3.5.3 >>> test = "Hello	world!"
    >>> print(test)
    Hello    world!
    >>> test
    'Hello	world!'
    #字符串中可以包含任何unicode编码中包含的字符。' '是转义字符,在打印输出中显示为多个空格(具体几个由操作环境决定)
    # 在交互模式下直接输变量名,显示更能体现字符串在python中的存储方式
    >>> d = r'c:windowssys able' >>> d 'c:\windows\sys\table'
    # 'r'前缀,'raw'的缩写,会使大部分的转义失效
    >>> sql = """select * from user where name='tom' """ >>> sql "select * from user where name='tom' "
    # 可以在三引号中方便的使用单双引号
    # 使用三引号可以方便的横跨多行,任何空白字符都会被包含到字符串中。

    字符串是可迭代的。

    列表:list

    列表是可变的序列,通常用于存储同类数据的集合,不过一个列表中可以存储任意不同类型的数据。

    列表可以通过不同的方式创建:

    • 使用一对方括号来表示空列表:[]
    • 使用一对方括号,括号中的元素用逗号隔开: [a, b, c]
    • 使用列表解析式:[x for in iterable]
    • 使用列表的类型构造函数:list() 或 list(iterable)

    构造函数创建一个列表,其元素和作为参数的可迭代对象完全相同,元素的顺序也相同。可迭代对象可以是序列、支持迭代的容器或者一个可迭代对象。如果可迭代对象是一个列表,返回一个该列表的拷贝,功能类似于iterable[:]。如果没有参数,构造函数创建一个新的空列表,[]。

    >>> lst = [1,2,3]
    >>> cp = list(lst)
    >>> cp
    [1, 2, 3]
    >>> lst is cp
    False

    以下内容翻译自 file:///Library/Frameworks/Python.framework/Versions/3.5/Resources/English.lproj/Documentation/library/stdtypes.html#sequence-types-list-tuple-range

    公共的序列操作

    下面表中列出的操作适用于所有的序列类型,不论是可变序列还是不可变序列。

    表中的操作是按优先级升序排列的。在表中,s和t是同一种序列类型,n,j,i,k表示整数,x是一个满足s所施加的任何类型和值限制任意对象。作为比较操作,in 和 not in 具有相同的优先级。

    OperationResultNotes
    in s True如果序列s中的某个元素等于x, 否则False (1)
    not in s False 如果序列s中的某个元素等于x, 否则True (1)
    t s 和 t 串联,返回一个新的序列
    (6)(7)
    n or s 相当于将s自身相加n次 (2)(7)
    s[i] 序列s的第i个元素,索引从0开始 (3)
    s[i:j] s的第i到j个元素,包含第i个元素,不包含第j个元素 (3)(4)
    s[i:j:k] 分片操作,每隔k个元素取s的第i到j个元素的一个元素 (3)(5)
    len(s) s序列的长度  
    min(s) 序列s中最小的元素  
    max(s) 序列s中最大的元素  
    s.index(x[, i[, j]]) 在s中出现的第一个x元素的索引  (i及i索引之后,j索引之前) (8)
    s.count(x) x在s中出现的总次数  

    相同的列表类型支持比较。实际上,元组和列表通过比较对应索引位置的元素进行。也就是说,如果两个列表或者元组对象相等,那么它们的长度需要相同并且每一个元素必须相等。

    注释:

    1. in 和 not in操作一般只用于普通的包含测试, 一些特殊的序列,例如str、bytes、bytearray也将它们用于子序列测试:

      >>> "gg" in "eggs"
      True
    2. 小于0的值当作0对待 (产生一个和s序列类型相同的空序列)。需要注意的是序列s中的元素没有被拷贝,它们只是被引用多次。 

      >>> lists = [[]] * 3
      >>> lists
      [[], [], []]
      >>> lists[0].append(3)
      >>> lists
      [[3], [3], [3]]

       [[]]是一个包含了一个空列表的元素的列表,所以通过 [[]] 3 产生的三个元素都引用同一个空列表。所以修改列表中的任意一个元素其实修改的是同一个列表。可以通过下面的方式创建一个包含不同列表元素的列表:

      >>> lists = [[] for i in range(3)]
      >>> lists[0].append(3)
      >>> lists[1].append(5)
      >>> lists[2].append(7)
      >>> lists
      [[3], [5], [7]]
    3. 如果i或j是负的,那么索引是相对于列表s末尾的,被替换为:len(s) i 或 len(s) j。但是-0还是0.
    4. 从i到j的分片操作定义一个新的带有索引k的项的序列,<= j。如果i或者j大于len(s), 使用 len(s)。如果i被省略,使用0。如果j被省略,使用len(s)。如果i大于等于j,那么返回的片段是空的。

    (未完待续)

  • 相关阅读:
    为什么 PCB 生产时推荐出 Gerber 给工厂?
    Fedora Redhat Centos 有什么区别和关系?
    【KiCad】 如何给元件给元件的管脚加上划线?
    MCU ADC 进入 PD 模式后出现错误的值?
    FastAdmin 生产环境升级注意
    EMC EMI 自行评估记录
    如何让你的 KiCad 在缩放时不眩晕?
    KiCad 5.1.0 正式版终于发布
    一次单片机 SFR 页引发的“事故”
    java基础之集合
  • 原文地址:https://www.cnblogs.com/wadirum/p/7574480.html
Copyright © 2011-2022 走看看