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]
-
列表元素的访问和计数
-
通过索引
[]
访问元素 -
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] >>>
-
count()
获得指定元素出现次数 -
len()
列表元素的个数 -
成员资格判断
in 与 not in
-
3. 列表的切片,排序
-
[start:end:step]
复习字符串的索引操作 -
修改原来的列表
a.sort(reverse=true)
;排序生成一个新的列表sorted()
-
用random包里的
shuffle()
打乱顺序 -
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. 元组的创建
-
()
,()
可以省略 -
tuple()
,tuple()
作用在一个可迭代对象>>> a=1,2,3 >>> type(a) <class 'tuple'> >>> a=tuple([1,2,3]) >>> a (1, 2, 3)
2. 元组的访问、计数、切片、成员资格判断与list一致
-
支持
[]
索引操作 -
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()
()
元组的总结
- 不可变序列
- 访问和处理速度快
- 与整数和字符串一样,可以作为字典的键,列表则永远不能作为字典的键使用