• Python 列表和元组 (2) 持续更新


    数据结构就是数据的集合。Python最基本的数据结构就是序列,每个元素都会被分配一个元素的位置,也可以称为索引。注意索引都是从0开始的。

    Python包含6种内建的序列,分别是列表、元组、字符串、Unicode字符串、buffer、xrange。

    列表和元组的主要区别,列表可以修改,元组不可以。

    一个简单的序列示例

    >>> member1 = ['zhao',12]
    >>> member2 = ['li',23]
    >>> database = [member1,member2]
    >>> database
    [['zhao', 12], ['li', 23]]

    Python还有一种容器的数据结构。 序列(列表和元组)和映射(字典) 两种主要的容器。序列包括每个元素的编号,映射每个元素则有一个名字(称为键)。

    序列的操作

    索引

    >>> number = '0123456789'
    >>> number[0]
    '0'
    >>> number[1]
    '1'
    >>> number[-1]
    '9'

    分片

    >>> number[0:2]
    '01'

    >>> number[-3:-1]
    '78'
    >>> number[-3:]
    '789'

    >>> number[:]
    '0123456789'

    更大的步长

    >>> number[0:-1:2]
    '02468'

    >>> number[-1:0:-2]
    '97531'

    >>> number[::-2]
    '97531'

    序列相加

    >>> [1,2,3] + [4,5,6]
    [1, 2, 3, 4, 5, 6]

    列表是不可以和字符串连接一起,序列的相加必须是两种相同类型的序列,才能进行连接操作。 比如下面不一样,相加就会报错。

    >>> [1,2,3] + '456'
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: can only concatenate list (not "str") to list

    乘法

    >>> [ [1,2,3] ] * 3
    [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

    用数字和列表相乘就是把序列中的元素重复x次。

    成员资格 in

    >>> number = [0,1,2,3,4,5,6,7,8,9]
    >>> 2 in number
    True

    in 运算符 是用来检查一个值是否在序列中存在。示例

    >>> database = [ ['zhao',123],
    ... ['li',456],
    ... ['wang',789] ]
    >>> ['wang',123] in database
    False
    >>> ['wang',789] in database
    True

    长度、最小值和最大值

    len、min和max

    >>> number = [0,1,2,3,4,5,6,7,8,9]
    >>> len(number)
    10
    >>> max(number)
    9
    >>> min(number)
    0

    关于max传进去的参数可以是迭代、两个和两个以上的参数,返回 最大Item 或 最大参数。

    Python之List

    因为字符串不能像列表一样修改,所以需要list函数把字符串转成List。

    >>> list('123456')
    ['1', '2', '3', '4', '5', '6']

    小技巧

    >>> somelist = list('123456')
    >>> ' '.join(somelist)
    '1 2 3 4 5 6'

    基本的List操作

    改变列表:元素赋值

    >>> number = [0,1,2,3,4,5,6,7,8,9]
    >>> number[0] = 10
    >>> number
    [10, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    删除元素

    >>> number = [0,1,2,3,4,5,6,7,8,9]
    >>> del number[0]
    >>> number
    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    分片赋值

    >>> number = [0,1,2,3,4,5,6,7,8,9]
    >>> number[2:] = [10,11,12,13,14,15,16,17,18,19,20]
    >>> number
    [0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

    分片赋值可以不需要替换任何原有元素的情况,插入新元素。

    >>> number = [0,1,2,3,4,5,6,7,8,9]
    >>> number[1:1] = [11,12,13]
    >>> number
    [0, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    分片赋值,也是可以删除元素

    >>> number = [0,1,2,3,4,5,6,7,8,9]
    >>> number[2:5] = []
    >>> number
    [0, 1, 5, 6, 7, 8, 9]

    当然删除元素结果是和 del number[2:5] 是一样的。也可以通过修改步长,进行分片赋值。

    列表方法

    append 向List末尾追加新对象:

    >>> number = [0,1,2]
    >>> number.append(99)
    >>> number
    [0, 1, 2, 99]

    count 统计某个元素出现列表中的次数:

    >>> number = [0,0,1,1,3,3,3]
    >>> number.count(3)
    3
    >>> number.count(1)
    2

    extend 可以在列表中一次性向末尾追加多个序列值。

    >>> a = [1,2,3]
    >>> b = [4,5,6]
    >>> a.extend(b)
    >>> a
    [1, 2, 3, 4, 5, 6]

    虽然这个操作和连接操作一样,(a + b).

    但是他们的区别在于, extend方法修改了被扩展的序列(在这个例子中,就是a)。而连接操作,则会返回一个全新的列表,那么这样的操作的效率会比extend方法低。

    也有类似和extend方法就是 利用分片赋值

    a[len(a):] = b

    一样是在末尾追加序列值。不过,代码还要注重可读性。这里的可读性就没有extend方法好了。

    index 找出列表元素的索引位置

    >>> number = [1,2,3,4,5]
    >>> number.index(5)
    4
    >>> number.index(6)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: 6 is not in list

    当找不到的该元素的时候,会引发异常。

    insert 将元素插入列表中

    >>> number = [1,2,3]
    >>> number.insert(2,99)
    >>> number
    [1, 2, 99, 3]

    分片插入和 上面删除一样

    >>> number = [1,2,3]
    >>> number[2:2] = [99]
    >>> number
    [1, 2, 99, 3]

    pop 移除最后一个元素,并返回该元素

    >>> number = [1,3,5]
    >>> number.pop()
    5
    >>> number
    [1, 3]

    pop 实际上一种常见的数据结构---栈。  入栈 和 出栈。

    remove 移除列表中第一个匹配项的元素

    >>> number = [1,2,2,3]
    >>> number.remove(2)
    >>> number
    [1, 2, 3]

    同样如果 remove 移除没有在序列中的元素,也会引发异常。

    reverse 将序列元素反转

    >>> number = [1,2,3]
    >>> number.reverse()
    >>> number
    [3, 2, 1]

    reversed函数会返回 反转序列的迭代器,迭代器是用于循环遍历。

    sort 对原序列进行排序

    >>> number = [23,18,99]
    >>> number.sort()
    >>> number
    [18, 23, 99]

    如果想排序返回序列的副本,可以使用 sorted 函数

    高级排序

    元素按照特定的方式进行排序,内建函数 cmp 提供升序。

    >>> cmp(10,22)
    -1
    >>> cmp(22,10)
    1
    >>> cmp(10,10)
    0

    >>> number = [99,12,33]
    >>> number.sort(cmp)
    >>> number
    [12, 33, 99]

    sort还有其它两个关键字参数,key、reverse

    >>> words = ['Hello','zhao','you']
    >>> words.sort(key=len)
    >>> words
    ['you', 'zhao', 'Hello']

    key 是为每个元素创建一个键,然后根据键来进行排序。

    >>> words.sort(key=len,reverse=True)
    >>> words
    ['Hello', 'zhao', 'you']

    reverse 指明是否反向排序

    元组

    元组也是一种序列,而且序列不能修改。

    创建元组

    >>> 1,2,3
    (1, 2, 3)

    >>> 1,2,3
    (1, 2, 3)
    >>> (4,5,6)
    (4, 5, 6)

    创建元组必须有逗号,哪怕只有一个元素。

    >>> 4,
    (4,)

    创建长度为3的 元组

    >>> tuples = (42,) * 3

    >>> len(tuples)
    3

    元组函数 Tuple

    >>> tuple('123')
    ('1', '2', '3')

    >>> tuple([1,2,3])
    (1, 2, 3)

    这里和列表是一样的

    元组操作

    >>> tuples = (1,2,3,4,5)
    >>> tuples[0]
    1
    >>> tuples[2:4]
    (3, 4)

  • 相关阅读:
    《那些年啊,那些事——一个程序员的奋斗史》——35
    《那些年啊,那些事——一个程序员的奋斗史》——34
    《那些年啊,那些事——一个程序员的奋斗史》——36
    《那些年啊,那些事——一个程序员的奋斗史》——36
    《那些年啊,那些事——一个程序员的奋斗史》——35
    《那些年啊,那些事——一个程序员的奋斗史》——35
    《那些年啊,那些事——一个程序员的奋斗史》——36
    大内高手—常见内存错误
    [open source]Lrc歌词解析器发布
    大内高手—共享内存与线程局部存储
  • 原文地址:https://www.cnblogs.com/z888/p/5685716.html
Copyright © 2020-2023  润新知