• 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,那么返回的片段是空的。

    (未完待续)

  • 相关阅读:
    如何使用PhoneGap打包Web App
    js获取鼠标点击事件的相对位置
    IDEA跳转到上一个下一个方法的快捷键
    JunitGenerator
    无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类
    IntelliJ IDEA 2019.3注册码(亲测有效,可激活至 2089 年)
    NACOS MalformedInputException 无法读取中文配置问题
    maven maven-surefire-plugin的乱码问题
    Idea单元测试Junit Generator设置
    Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
  • 原文地址:https://www.cnblogs.com/wadirum/p/7574480.html
Copyright © 2020-2023  润新知