美文网首页Python
3、List和tuple

3、List和tuple

作者: 代码充电宝 | 来源:发表于2019-04-26 08:43 被阅读3次

    (1)List

    • Python内置的一种数据类型是列表list
    • Python是动态语言,list可以包含各种数据类型
    • list是一种有序的集合,可以随时添加和删除其中的元素
    L = ['Adam', 95.5, 'Lisa', 85, 'Bart', 59]
    print L
    # 空list
    empty_list = []
    
    • 长度
    L = ['Michael', 100, True]
    len(L)
    
    • 正序索引
    L = [95.5,85,59]
    print L[0]
    print L[1]
    print L[2]
    print L[3]
    
    • 倒序索引
    L = [95.5, 85, 59]
    print L[-1] #倒数第一
    print L[-2] #倒数第二
    print L[-3] #倒数第三
    print L[-4] #倒数第四,越界报错
    
    • append默认添加到尾部
    >>> L = ['Adam', 'Lisa', 'Bart']
    >>> L.append('Paul')
    >>> print L
    ['Adam', 'Lisa', 'Bart', 'Paul']
    
    • insert()
    • 第一个参数是索引号,第二个参数是待添加的新元素:
    >>> L = ['Adam', 'Lisa', 'Bart']
    >>> **L.insert(0, 'Paul')**
    >>> print L
    ['Paul', 'Adam', 'Lisa', 'Bart']
    
    • pop(index)
    • 不写默认删掉list的最后一个元素,并且它还返回这个元素,所以我们执行 L.pop() 后,会打印出 'Paul'。
    • L.pop(1)删除指定位置
    >>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
    >>> L.pop()
    'Paul'
    >>> print L
    ['Adam', 'Lisa', 'Bart']
    
    >>> L.pop(1)
    'Lisa'
    
    >>> print L
    ['Adam', 'Bart']
    
    • 反转
    L = ['Adam', 'Lisa', 'Bart']
    L.reverse()
    print(L) # ['Bart', 'Lisa', 'Adam']
    
    • 赋值
    >>> L[2] = 'Paul'
    >>> print L
    
    L = ['Adam', 'Lisa', 'Paul']
    >>> L[-1] = 'Paul'
    
    • list和tuple快速赋值
    a,b = [1,2]
    c,d = (3,4)
    print(a,b)
    print(c,d)
    
    # ValueError: too many values to unpack (expected 2)
    # L = [1,2,3]
    # e,f = L
    

    (2)tuple

    • tuple也是一种列表,但不可变,用小括号表示
    >>> t = ('Adam', 'Lisa', 'Bart')
    
    • tuple不可变,所有没有 append()、insert()、pop(),也不能被赋值成别的元素
    >>> t[0] = 'Paul'
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    
    • 空tuple
    t = ()
    print t # ()
    
    • 单元素tuple
    • ()既可以表示tuple,又可以表示运算时的优先级,(1)被解释成了整数1而不是单元素tuple(1)
    • 有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:
    >>> t = (1)
    >>> print t
    1
    >>> t = (1,)
    >>> print t
    (1,)
    
    • tuple不可变的理解
    >>> t = ('a', 'b', ['A', 'B'])
    >>> L = t[2]
    >>> L[0] = 'X'
    >>> L[1] = 'Y'
    >>> print t
    ('a', 'b', ['X', 'Y'])
    

    不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
    别急,我们先看看定义的时候tuple包含的3个元素:

    image.png

    当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple变为:

    image.png

    表面上看,tuple的元素确实变了,但其实变的不是 tuple 的元素,而是list的元素。

    tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

    理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。

    相关文章

      网友评论

        本文标题:3、List和tuple

        本文链接:https://www.haomeiwen.com/subject/ksvxnqtx.html