zoukankan      html  css  js  c++  java
  • Python3基础(二)—— Python可变序列

    本文会集中讲Python3中的可变序列——列表。

    Python序列有3种基本序列类型(list、tuple、range)、处理文本的序列类型(str)、处理二进制数据的序列类型(bytes、bytearray、memoryview)。

    其中这些序列类型又可以分为可变序列(list)和不可变序列(tuple、str)。

    一般来说,可变序列会比不可变序列多一些通用语法(注意不是某种类型的特定用法),所以,本文我会先讲序列的通用语法,再讲可变序列list具体的特殊用法。

    一、序列的通用用法

    这里先给出序列(不管是可变序列还是不可变序列)的通用用法:

    操作

    结果

    x in s / x not in s

    判断x是否在序列s中(True、False)

    s + t

    将序列s和合并,形成一个新序列

    (注意s和t应是相同类型的序列)

    s * n  /  n * s

    返回一个重复s内容n次的新序列

    s[i]

    返回s的第i+1个元素

    s[i:j]

    返回s的第 i+1到j个元素,作为新的序列

    s[i:j:k]

    按步长返回s的第 i+1到j个元素,作为新的序列

    len(s) / min(s) / max(s)

    返回s序列的长度、最小元素、最大元素

    s.index(x [, i [, j]])

    返回在s中的第一个出现的x的索引(可通过i和j规定查找范围

    s.count(x)

    查看s序列中x元素的出现次数

     示例:

    >>> s = 'hello,'
    >>> t = 'world'
    >>> s + t
    'hello,world'
    >>> 
    >>> list = [1,2,3]
    >>> 3 * list
    [1, 2, 3, 1, 2, 3, 1, 2, 3]
    >>> 
    >>> list = [1,2,3,1,2,3,1,2,3]
    >>> list.index(1,2,8)  #返回列表中索引为2到7之间出现的第一个1的列表索引
    3

    此外,相同类型的序列还可以进行比较。

    二、可变序列的通用用法

    在上面的基础上,可变序列还有自己的通用用法,如下表所示:

    操作

    结果

    s [i] = x

    对s的第i+1个元素重新赋值

    s [i:j] = t

    用t序列(可迭代)中的元素替换s序列指定

    范围内的元素(注意t的长度要和范围一致)

    del s [i:j]

    删除s某个范围内的元素

    s [i:j:k] = t

    同上,只是多了个步长而已

    del s [i:j:k]

    同上,只是多了个步长而已

    s.append(x)

    在序列s的末尾新增一个元素x

    s.clear()

    删除s中所有元素(与del s[:]相同)

    s.copy()

    s的浅拷贝(与s[:]相同)

    s.extend(t)或s + = t

    使用t的内容延伸s(大部分与s [len(s):len(s)] t3 > = t)

    s *= n

    更新s,其内容重复n

    s.insert(i, x)

    在由i给出的索引处插入xs(同s [i:i] = [x])

    s.pop([i])

    返回并删除索引为i的元素

    s.remove(x)

    删除s序列中第一个x

    s.reverse()

    对s进行翻转

    >>> s = 'Jeremy’
    >>> s.reverse()
    Traceback (most recent call last):
      File "<pyshell#49>", line 1, in <module>
        s.reverse()
    AttributeError: 'str' object has no attribute 'reverse'
    >>> 
    >>> s = [1,2,3,4,5]
    >>> s *= 2
    >>> s
    [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
    >>> s.insert(5,'s')
    >>> s
    [1, 2, 3, 4, 5, 's', 1, 2, 3, 4, 5]
    >>> 
    >>> s.sort()  #排序时要注意类型
    Traceback (most recent call last):
      File "<pyshell#78>", line 1, in <module>
        s.sort()
    TypeError: unorderable types: str() < int()
    >>> 
    >>> s.clear()
    >>> s
    []

    三、列表list

    1、列表的创建

    一维列表:

    >>> 
    >>> List = []   #(1)初始化为空列表
    >>> List
    []
    >>> 
    >>> a = 2
    >>> List1 = [1,a,'str']  #(2)初始化为非空表
    >>> List1
    [1, 2, 'str']
    >>> 
    >>> List2 = [0 for i in range(5)]  #(3)使用循环
    >>> List2
    [0, 0, 0, 0, 0]

    二维列表:

    >>> 
    >>> List3 = [[0 for col in range(4)]for row in range(4)]  #(1)使用循环
    >>> List3
    [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
    >>> 
    >>> List4 = [[]] * 3   #(2)方法2
    >>> List4
    [[], [], []]
    >>>
    >>>  #注意:方法2--修改List4的任何元素都修改 其他子列表
    >>> List4[0].append(10)
    >>> List4
    [[10], [10], [10]]
    >>> 
    >>> List4[0][0] = 20
    >>> List4
    [[20], [20], [20]]
    >>>  #新增/修改一个值的时候,整个列表都会修改。所以最好不要用这种方法
    >>> 
    >>> List5 = [[0,1,2],[3,4]]   #方法3
    >>> List5
    [[0, 1, 2], [3, 4]]

    顺便分析一下方法2出现问题的原因:list * n是n个list的浅拷贝的连接,list乘以n以后还是一个 list, 只是对原list里面的 元素 是浅拷贝了n份。

    [[]]是一个含有一个空列表元素的列表,[ [] ] * 3, 里面的元素是 [], 这是一个list,所以会存在浅拷贝之后指向同一个list的问题。所以[[]]*3表示3个指向这个空列表元素的引用(这个元素其实是没有被复制的),修改任何一个元素都会改变整个列表。

    myList = [([0] * 3)for i in range(4)]这种方法则没有这种问题,因为[0] * 3 , 里面的元素是 0, 是一个 int ,不可变对象,浅拷贝没问题。

    2、列表的相关操作

    如上面表格所示

  • 相关阅读:
    【微服务架构】SpringCloud之Ribbon
    SpringCloud之Eureka(注册中心集群篇)
    Eureka简介
    两行代码 搞定计数
    HBase详细概述
    电商项目介绍---说的很好
    面试:----Nginx的一理解
    redis介绍
    Linux操作系统介绍
    什么是Solr
  • 原文地址:https://www.cnblogs.com/JeremyChan/p/6958913.html
Copyright © 2011-2022 走看看