Python常用数据结构与操作

元组(Tuple)

zip()函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。

我们可以使用 list() 转换来输出列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

语法:

1
zip([iterable, ...])

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回一个对象
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped) # list() 转换为列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]

>>> a1, a2 = zip(*zip(a,b)) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
>>>

另一个示例:

1
2
3
test_arr = ['a','b','c','d','e']
sorted_test_arr = sorted(zip(test_arr, range(len(test_arr))))
print(sorted_test_arr) # [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)

列表(List)

列表(list)是python常用的四种collection数据类型之一,使用方括号括起来即可,方括号中的元素类型不需要相同

1
2
3
4
sample_list = [] # 空列表
list1 = ['张三','李四','王五']
list2 = [1, 2, 3, 4, 5]
list3 = [1, 2, 3, "a", "b", "c"]

列表的创建

列表取值、切片操作

1
2
3
4
5
6
7
8
9
10
list1 = [1,2,3,4,5]
print(list1[2]) # 3 (第三个元素)
print(list1[-2]) # 4 (倒数第二个元素)
print(list1[2:4]) # [3, 4] (第三个元素到第四个元素)
print(list1[2:]) # [3, 4, 5] (从第三个元素开始到最后)
print(list1[-2:]) # [3, 4, 5] (从倒数第二个元素开始到最后)
print(list1[-4:3]) # [2, 3] (从倒数第四个元素到正数第三个元素)
print(list1[::-1]) # [5, 4, 3, 2, 1] 反转
print(list1[::2]) # [1, 3, 5] (每隔两个截取一个元素)
print(list1[1:4:2]) # [2, 4] (每隔两个截取一个元素,从第二个元素开始到第五个(不包括))

添加元素

使用list.append('new element')在列表末尾追加元素:

1
2
3
sample_list =[1,2,2,4,4,4]
sample_list.append(5)
print(sample_list) # [1, 2, 2, 4, 4, 4, 5]

也可以使用list.insert(index, obj)来在列表索引值为index的元素前插入obj元素

1
2
3
sample_list =[1,2,2,4,4,4,5]
sample_list.insert(2, 3)
print(sample_list) # [1, 2, 3, 2, 4, 4, 4, 5]

删除元素

1
2
3
list1 = [1,2,3,4,5]
del list1[2]
print(list1) # [1,2,4,5]

可以使用list.pop([index=-1])方法来移除列表中的一个元素(默认最后一个元素), 并且返回该元素的值:

1
2
3
4
5
6
7
sample_list = [1, 2, 3, 4, 5]
print(sample_list.pop()) # 5
print(sample_list) # [1, 2, 3, 4]

sample_list = [1, 2, 3, 4, 5]
print(sample_list.pop(1)) # 2
print(sample_list) # [1, 3, 4, 5]

可以使用list.remove(obj)方法来移除元素:

1
2
3
4
5
6
7
sample_list = ['BMW', 'Tesla', 'Benz', 'Audi']
sample_list.remove('Tesla')
print(sample_list) # ['BMW', 'Benz', 'Audi']

sample_list1 = [1, 2, 3, 4, 5]
sample_list1.remove(3)
print(sample_list1) # [1, 2, 4, 5]

修改元素

1
2
list1 = [1,2,3,4,5]
del list1[2]

合并列表

  1. 直接使用+来合并列表
1
2
3
list1 = [1,2,3,4,5]
list2 = [6,7,8]
print(list1 + list2) # [1, 2, 3, 4, 5, 6, 7, 8]
  1. 可以使用extend方法
    在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
1
2
3
4
list1 = [1,2,3,4,5]
list2 = [6,7,8]
list1.extend(list2)
print(list1) # [1, 2, 3, 4, 5, 6, 7, 8]
  1. 使用切片
1
2
3
4
list1 = [1,2,3,4,5]
list2 = [6,7,8]
list1[len(list1): len(list1)] = list2
print(list1) # [1, 2, 3, 4, 5, 6, 7, 8]

list1[x:x] = list2,其中x表示list2插入list1的位置

比如:

1
2
3
4
list1 = [1,2,3,4,5]
list2 = [6,7,8]
list1[2:2] = list2
print(list1) # [1, 2, 6, 7, 8, 3, 4, 5]

注意: 如果使用append来合并两个列表会变成下面的结果:

1
2
3
4
list1 = [1,2,3,4,5]
list2 = [6,7,8]
list1.append(list2)
print(list1) # [1, 2, 3, 4, 5, [6, 7, 8]]

判断数组中是否包含某元素

1
2
3
list1 = [1,2,3,4,5]
print( 2 in list1) # True
print( 0 in list1) # False

列表复制

1
2
list1 = [1,2,3,4,5]
print( list1 * 3) # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

list.count(obj)

同于统计某个元素在列表中出现的次数

1
2
sample_list =[1,2,2,4,4,4,5]
print(sample_list.count(4)) # 3

反转列表中的元素

可以使用list.reverse()来反转列表中的元素

1
2
3
sample_list = [1, 2, 3, 4, 5]
sample_list.reverse()
print(sample_list) # [5, 4, 3, 2, 1]

列表排序

使用list.sort()对原列表进行排序

1
2
3
sample_list = [1, 3, 5, 2, 4, 6]
sample_list.sort()
print(sample_list) # [1, 2, 3, 4, 5, 6]

获取最大、最小值

1
2
3
4
list01 = [1,2,3,4,5]
print(max(list01)) # 5
print(min(list01)) # 1
print(sum(list01)) # 15

字典(Dict)

定义

1
book = {'key': 'valule', ... }

访问

1
book['三国演义']

Conda

mac 安装了conda后,前面会有一个(base),是因为安装了Conda后,
每次启动终端都会自动启动Conda的base环境,Conda的环境可以使用conda env list查看

如果不想每次启动时都显示这个base,可以使用下面的命令关掉自动启动:

1
conda config --set auto_activate_base false

一次性启动或者关闭环境的命令:

1
2
conda deactivate
conda activate