Notes On Python Basics - Day3

Day-3 Python Basics

Created: January 9, 2022 6:16 PM

列表

1. 列表的储存

首先列表是一个sequence序列(序列属于容器),容器用来储存多个对象,在列表中个元素储存的是多个对象的id地址,当对应id地址的对象值改变时,列表元素对应的id并没有改变,但是对应元素的值变了。因此成列表是一个可变序列

>>> a=[1,2,3,4]
>>> b=[a,3,4,4,5]
>>> print(b,id(b))
[[1, 2, 3, 4], 3, 4, 4, 5] 2900206302848
>>> b[0][1]=100
>>> print(b,id(b))
[[1, 100, 3, 4], 3, 4, 4, 5] 2900206302848

2. List增、删、改、访问元素

  • 列表的增加, append() 从列表的最后添加, extend() 从列表的最后添加列表, +=操作, +操作, inset() 从指定位置插入

    需注意+操作会改变原列表的id,本质上是创建了一个新的列表

    >>> print(a,id(a))
    [1, 2, 3, 4] 2900206303616
    >>> a=a+[1,2,3,4]
    >>> print(a,id(a))
    [1, 2, 3, 4, 1, 2, 3, 4] 2900206246208
    
  • 列表删除

    del() 删除列表指定位置的元素 (涉及到位置的操作,都会涉及到拷贝后面顺序中的列表元素)

    pop() 删除并返回指定位置元素

    remove()方法,操作的并非是索引位置而是直接搜索存在的元素,删除首次出现的指定元素

    如何删除所有指定元素?

    >>> [y for x,y in list(enumerate(a)) if y!=2]
    [1, 3, 4, 1, 3, 4]
    
  • 列表元素的访问和计数

    1. 通过索引 []访问元素

    2. index() 获得指定元素第一次出现的索引值

      如何获得指定元素所有的索引值?使用 enumerate()

      >>> a   
      [1, 2, 3, 4, 1, 2, 3, 4]
      >>> a.index(2)
      1
      >>> [x for x,y in list(enumerate(a)) if y==2]
      [1, 5]
      >>>
      
    3. count() 获得指定元素出现次数

    4. len() 列表元素的个数

    5. 成员资格判断 in 与 not in

3. 列表的切片,排序

  1. [start:end:step] 复习字符串的索引操作

  2. 修改原来的列表 a.sort(reverse=true);排序生成一个新的列表 sorted()

  3. 用random包里的 shuffle()打乱顺序

  4. reversed() 函数作用于列表可生成一个迭代器(具体原理之后再详解)

    >>> a = [1,2,3,4]*2
    >>> sorted(a,reverse=True)##生成了新列表
    [4, 4, 3, 3, 2, 2, 1, 1]
    ##shuffle()可以不生成新的列表
    >>> a=[1,2,3,4]*2  
    >>> print(a,id(a))
    [1, 2, 3, 4, 1, 2, 3, 4] 2900206304896
    >>> random.shuffle(a)
    >>> print(a,id(a))
    [3, 1, 2, 3, 2, 4, 4, 1] 2900206304896
    

多维列表

什么是多维列表?列表中的元素又是列表就是多维列表 [ [1,2,3],[1,2,3]]

元组

元组是不可变序列,因此没有增删改元素的方法

1. 元组的创建

  1. (), ()可以省略

  2. tuple(), tuple() 作用在一个可迭代对象

    >>> a=1,2,3
    >>> type(a)
    <class 'tuple'>
    >>> a=tuple([1,2,3])
    >>> a  
    (1, 2, 3)
    

2. 元组的访问、计数、切片、成员资格判断与list一致

  1. 支持 [] 索引操作

  2. zip()将多个列表对应生成元素位多个元组的列表

    >>> a=[1,2,3]
    >>> b=[2,3,2]
    >>> c=[23,42,32]
    >>> d=zip(a,b,c)
    >>> d  
    <zip object at 0x000002A341C43AC0>
    >>> list(d)
    [(1, 2, 23), (2, 3, 42), (3, 2, 32)]
    

3. 生成器推导式创建元组

(func(x) for x in 可迭代对象)

>>> s =(x**2 for x in range(10))
>>> s  
<generator object <genexpr> at 0x000002A341C49890>
>>> tuple(s)
(0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
>>> tuple()
()

元组的总结

  1. 不可变序列
  2. 访问和处理速度快
  3. 与整数和字符串一样,可以作为字典的键,列表则永远不能作为字典的键使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值