Python组合数据类型——组合/序列数据类型——元组、列表、字典
元组
列表
1.创建
l1 = []
l2 = [1]
l3 = ["a", "b", "c", "d"]
print(l1, l2, l3)
# 输出:[] [1] ["a", "b", "c", "d"]
l4 = list()
l5 = list("abc")
l6 = list(range(3))
print(l4, l5, l6)
# 输出:[] ["a", "b", "c"] [0, 1, 2]
2. 基本操作
3.函数
-
ls.index(target):查找列表元素target对应的索引
-
ls.sort():将列表中的元素从小到大进行排列,直接是在原列表中进行排列,没有返回值
-
extend():将指定的列表元素(或任何可迭代的元素)添加到当前列表的末尾
fruits = ['apple', 'banana', 'cherry'] cars = ['Porsche', 'BMW', 'Volvo'] fruits.extend(cars) print(fruits) # res:['apple', 'banana', 'cherry', 'Porsche', 'BMW', 'Volvo']
-
列表各项操作的时间复杂度
- 列表的本质:over-allocated数组
- 列表存储的是对象的引用,不是对象本身
- append: 不需要扩容的情况下 O ( 1 ) O(1) O(1),需要扩容的情况下 O ( n ) O(n) O(n)
- pop: 删除末尾的数据 O ( 1 ) O(1) O(1),删除指定位置的数据 O ( n ) O(n) O(n)
- insert: O ( n ) O(n) O(n)
- del: O ( n ) O(n) O(n)
- len: O ( 1 ) O(1) O(1):在列表实现中,其内部维护了一个Py_ssize_t类型的变量表示列表内元素的个数,因此时间复杂度为O(1)
- reverse: O ( n ) O(n) O(n)
- sort: O ( n l o g n ) O(nlogn) O(nlogn)
-
拓展:ls.sort()函数和sorted函数
- sort是列表内置的函数,只能用于列表的排序,直接改变原来列表的排序,没有返回值
- sorted可以用于任何可迭代的对象(字符串、列表、元组、字典),排序结果作为返回值,需要定义变量进行承接,原来列表内的顺序是不发生改变的
sort(key, reverse)
sorted(iterate, key ,reverse)
以sorted为例,sort可参照该用法
key:指定排序的关键字
reverse:为True表示从大到小排列,为False表示从小到大(默认)>>>l=[('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)] >>>sorted(l, key=lambda x:x[0]) Out[39]: [('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)] >>>sorted(l, key=lambda x:x[0], reverse=True) Out[40]: [('e', 3), ('d', 4), ('c', 6), ('b', 2), ('a', 1)] >>>sorted(l, key=lambda x:x[1]) Out[41]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)] >>>sorted(l, key=lambda x:x[1], reverse=True) Out[42]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)] # 关于排序的拓展: def test1(nums): ans = sorted(nums, key=lambda x: (x[0], -x[1])) """ 在第一个关键字排序的基础上 允许第二个关键字更改第一个关键字相同的元素之间的排序 如:将(2, 4), (2, 6)的排序改成(2, 6), (2, 4) """ return ans def test2(nums): ans = sorted(nums, key=lambda x: x[0]) ans = sorted(ans, key=lambda x: -x[1]) # 不会维持第一次排序的结果,自己排自己的 return ans def main(): nums = [[1, -2], [2, 6], [2, 8], [0, 4], [5, 7]] print(test1(nums)) print(test2(nums)) if __name__ == "__main__": main()
-
len(ls):求取列表长度
-
max(ls):求取列表中元素的最大值
-
min(ls):求去列表中元素的最小值
4.列表解析表达式
[i**2 for i in range(10)]
# 输出:[0, 1, 4, 9, 16, 5, 36, 49, 64, 81]
[(i, i**2) for i in range(10)]
# 输出: [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81)]
[i for i in range(10) if i%2 == 0]
# 输出:[0, 2, 4, 6, 8]
字典
update函数
enumerate()函数
1.功能
将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列
索引序列的形式:(数据,数据下标)
2.用途
一般用在for循环当中
3.示例
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
经典示例
>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
... print i, element
...
0 one
1 two
2 three