萌小帅 一路向前

要有朴素的生活和遥远的梦想,不管明天天寒地冻,路遥马亡...^-^...

python之列表、元组、集合手册

Content

  •  列表操作
  • 元组操作
  • 集合操作

列表操作 

 列表是python中一种可变可修改的数据类型,其可以存储所有的数据类型的信息。   ---- [ ]   中括号  

  • 列表的创建

  列表有两种创建方式:   

1 L = [1, 3, 4, 'Hello', True, print('3')]      # 通过 [] 的方式创建列表
2 L = []     # 也支持直接生成一个空的列表
3 
4 s = 'hello world'
5 L1 = list(s)     # 也可以通过list关键字创建列表,只不过这样生成的列表L1 中的字符串被分割, 如下图第二行所示
6

 列表中如果包含 print('3')这样的内容,运行后会直接打印出3; 如果print(L),打印出的结果该位置显示的是None。

  •  列表的索引与修改
1 L = [1, 2, 3, 5, 'bob']
2 L[0:3]  # 取前3个值
3 L[:]  # 取所有的值
4 L[-1] # 取最后一个值

修改直接通过索引值进行赋值,即可完成修改。

  • 列表的复制
L = [1, 2, 3, 5]
print(L)
print(L*2)  # 该操作时列表的复制,并不能使L中的每一个元素都乘以2   运行结果如下图所示

  •  列表的方法总结

  列表共有11种方法,可以分为8大类型:

 1 '''列表方法汇总'''
 2 # 创建列表
 3 L = [1, 2, 3, 5]
 4 
 5 # 1. 添加元素
 6 L.append(3)   # 会在末尾添加元素3, 这种添加方式只能添加一个元素, 1
 7 L.append([4, 3])  # 当然也可以添加以列表为一个元素的操作,但该元素即为列表中套列表的形式
 8 ## 列表的合并
 9 L.extend([4, 3])   # 该操作会在末尾添加多个值, 但不会是列表套列表的形式, 而是一种列表合并的操作2
10 L = L+[5, 6]      # 通过加号+也可以实现列表的合并,但一般不这么用,一般就是使用extend方法
11 ## 在某个位置新增
12 L.insert(3, 6)    # 在索引3 增添元素6   3
13 
14 # 2. 统计列表中某元素的个数
15 a = L.count(3)  # 4
16 
17 # 3. 获取某区段内某元素的下表(第一次出现)
18 index1 = L.index(3)  # 默认为列表内所有元素  5
19 index2 = L.index(3, 2, -1)   # 按起始位置 到终止为止查找第一次出现该字符的索引。  如果在该区段没有该字符,会报错,因此使用该操作时,最好使用异常处理
20 
21 # 4. 清空列表内容,使列表变为[]
22 # L.clear()   # 将L清空了,但变量名还在  []  6
23 
24 # 5. 列表翻转
25 L.reverse()     # 7
26 Lx = L[::-1]
27 # 6. 列表赋值  该赋值L发生变化时,赋值的并不会发生变化
28 pickL = L.copy()    # 浅复制   8
29 L.extend([1, 2, 3, 4, 5])
30 
31 # 7. 列表元素的删除
32 L.pop(4)  # 按索引删除列表  9
33 L.remove(4)  # 按元素删除  删除第一个该元素 10
34 
35 # 8. 列表元素的排序
36 L.sort(reverse=True)  # 可以按照某些关键字排序,也可以对其进行倒排,顺排   reverse=true 表示逆序排列  11
37 L.sort()   # 默认为顺序排列
38 L1 = sorted(L, reverse=True)   # sort 方法并不会影响L本身,需要赋值新变量 也叫临时排序
39 
40 L2 = ['This', 'is', 'a', 'BOy']
41 L3 = [i.lower() for i in L2]
42 L3.sort(key=len) # 使用某些关键字排序  此处是按照字符的长度排序

P.S.  列表的.copy是浅复制。 python中也有自带的copy模块,其中包含:

  • 浅复制: 复制体发生变化时,本体也会发生改变;同样,本体发生变化时,复制体也会发生变化。  本体和复制体属于命运共同体。   但是,对于列表自带的方法修改时,二者并不会发生相关联的变化
  • 深赋值:复制体和本体是相互独立的,各自的变化不会影响另一方。
 1 import copy
 2 x = [[1,2,3],[4,3,5],[12,4,5]]
 3 y = [[1,2,3],[4,6,5],[12,4,6]]
 4 
 5 # result = x.copy()
 6 # result1 = copy.copy(x)
 7 result2 = copy.deepcopy(x)
 8 
 9 for i in range(len(x)):
10     for j in range(len(x[0])):
11         # result[i][j] = x[i][j] + y[i][j]
12         # result1[i][j] = x[i][j] + y[i][j]
13         result2[i][j] = x[i][j] + y[i][j]
14 
15 
16 # print(result)
17 # print(result1)
18 print(result2)
19 
20 print(x)
21 print(y)
  • 列表的常用技巧
  1. enumerate的用法
1 L = ['存款准备金', '基准利率', '加息', '降准']
2 dic = dict((v, i)for v, i in enumerate(L))  # 生成了一个带编号的字典
3 print(dic)
4 
5 for i, v in enumerate(L):
6     print(i, v)

  2. zip的用法

1 L1 = [1, 2, 3, 4, 5]
2 L2 = [4, 3, 2, 1]
3 Lx = zip(L1, L2)  # 组合以后生成的迭代器   (1,4)(2,3)(3,2)(4,1)  返回的是一个元组
4 for i in Lx:
5     print(i)

 

  3. 列表的单个字符转字符串列表

1 a = [''.join(['h', 'e', 'l', 'l', 'o'])]
2 print(a)

 

元组操作

 元组是一种只读型列表,意味着其一旦创建便不能再修改,因此也就少了很多修改的方法。  ()圆括号

  一共只用2种方法:统计     索引查询

1 a = ()  # 只读列表,一旦创建,不能修改  除非重新命名   因此也就只有两种方法
2 a = ('a', 'b')
3 index1 = a.index('a')
4 num = a.count('a')

 

集合操作

 集合是一种无序的数据类型,在集合中,没有重复的元素,这是集合的特性。

 1 a = set('boooooy')
 2 a.remove('o')  # 元素中没有该元素   会报错
 3 print(a)
 4 a.pop()  # 因为无序,所以此处不能按照索引删除,只能删除最后一个   
 5 a.discard('p')  # 元素中没有该元素  不会报错
 6 a.update('ig')   # update上去的还是会分割
 7 # a.clear()
 8 b = a.copy()
 9 a.add('MOM')   # add添加的是一个整体
10 c = a.difference(b)   # 寻找a里有而b里没有的元素  取差集
11 # d = a.difference_update(b)
12 e = a.intersection(b)    # 取交集
13 # f = a.intersection_update()
14 g = a.isdisjoint(b)     # 判断两个集合是否独立 没有交集  返回布尔变量
15 h = a.issubset(b)   # 判断a是不是b的子集  返回布尔变量
16 i = a.issuperset(b)  # 判断a是不是b的父集  返回布尔变量
17 j = a.symmetric_difference(b)  # 各自互相没有的元素提取出来,返回的也是集合类型
18 k = a.union(b)   # 取并集   | 也可以用该云算
19 print(type(a))
20 print(a)
21 print(b)
22 print(c)
23 # print(d)
24 print(e)
25 # print('f:',f)
26 print(g)
27 print(h)
28 print(i)
29 print(type(j))
30 print(k)

 

posted on 2018-11-14 19:04  墨殇浅尘  阅读(365)  评论(0编辑  收藏  举报

导航