Python学习笔记(十)推导式与公共操作

一、公共操作

1.运算符

运算符 描述 支持的容器类型
+ 合并 字符串,列表,元组
* 复制 字符串,列表,元组
in 是否存在 字符串,列表,元组,字典,集合
not in 是否不存在 字符串,列表,元组,字典,集合

1)合并

1 # 字符串
2 a = 'I'
3 b = 'love'
4 c = 'You'
5 print(a + " " + b + " " + c)
1 # 列表
2 li = [1, 2, 3, 4, 5]
3 li2 = [6, 7, 8, 9, 10]
4 print(li + li2)  # 并不会改变元素中的值
1 # 元组
2 tup = (1, 2, 3, 4, 5)
3 tup2 = (6, 7, 8, 9, 10)
4 print(tup + tup2)

2)复制

1 # 字符串
2 print('放假了' * 10)
1 # 列表
2 li3 = [1, 2, 3]
3 print(li3 * 3)  # 并不会改变元素中的值
1 # 元组
2 tup3 = (1, 2, 3)
3 print(tup3 * 3)

3)是否存在

1 li3 = [1, 2, 3]
2 if 1 in li3:
3     print('在的')
4 else:
5     print('不在')

2.公共方法

函数 描述
len() 计算容器中元素个数
del 删除
max() 返回容器中元素最大值
min() 返回容器中元素最小值
range(start,end,step) 生成从start到end的数字,步长为step,供for循环使用
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环中
sum() 序列求和
zip() 合并序列

1)max()

1 # 字符串
2 str1 = 'abcdefg'
3 print(max(str1))  # 比较的是ASCII码值
4 # 列表
5 list1 = [10, 20, 30, 40]
6 print(max(list1))

2)enumerate()

复制代码
 1 # enumerate(可遍历对象,start=0)
 2 list1 = ['a', 'b', 'c', 'd', 'e']
 3 # 通过循环 得到每一个值的下标
 4 # for循环
 5 count = 0
 6 for i in list1:
 7     # print(i, count)
 8     print(i, list1.index(i))
 9     count += 1
10 # while循环
11 # len() while 自增1 长度5 下标0~4
12 count = 0
13 while count < len(list1):
14     print(list1[count], count)
15     count += 1
16 # 使用enumerate
17 for index, value in enumerate(list1):
18     print(index, value)  # 直接返回的是元组
复制代码

3)zip()

  • zip()函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
  • 如果各个迭代器的元素个数不一致,则返回列表长度与最短对象相同
  • 利用*号操作符,可以将元组解压为列表
复制代码
1 a = [1, 2, 3]
2 b = [4, 5, 6]
3 c = [4, 5, 6, 7, 8]
4 d = {'name': 'yue', 'age': 18, 'gender': 1}
5 
6 # 迭代器元素个数一致
7 zipped = zip(a, b)
8 print(zipped)
9 print(list(zipped))
复制代码
复制代码
1 a = [1, 2, 3]
2 b = [4, 5, 6]
3 c = [4, 5, 6, 7, 8]
4 d = {'name': 'yue', 'age': 18, 'gender': 1}
5 
6 # 迭代器元素个数不一致
7 zipped = zip(a, c)
8 print(zipped)
9 print(list(zipped))
复制代码
复制代码
1 a = [1, 2, 3]
2 b = [4, 5, 6]
3 c = [4, 5, 6, 7, 8]
4 d = {'name': 'yue', 'age': 18, 'gender': 1}
5 zipped = zip(a, b)
6 
7 # 解包
8 x1, x2 = list(zip(*zipped))
9 print(x1, x2)
复制代码

 

二、容器类型转换

1.转字符串

1 a = 1
2 print(str(a), type(str(a)))

2.转数值

复制代码
1 a = '1'
2 print(int(a), type(int(a)))
3 
4 a = 'asd'
5 print(int(a), type(int(a))) # ValueError: invalid literal for int() with base 10: '20:49:23'
6 
7 a = '20:49:23'
8 print(int(a), type(int(a))) # ValueError: invalid literal for int() with base 10: '20:49:23'
9 print(float(a), type(float(a)))  # ValueError: invalid literal for int() with base 10: '20:49:23'
复制代码

3.转元组

1 list1 = [10, 20, 30, 40, 50, 20]
2 set1 = {100, 200, 300, 400, 500}
3 print(tuple(list1))
4 print(tuple(set1))

4.转列表

1 tuple1 = ('a', 'b', 'c', 'd', 'e')
2 set1 = {100, 200, 300, 400, 500}
3 print(list(tuple1))
4 print(list(set1))

5.转集合

1 list1 = [10, 20, 30, 40, 50]
2 tuple1 = ('a', 'b', 'c', 'd', 'e')
3 print(set(list1))
4 print(set(tuple1))

6.总结

  • 列表 元组 集合 三者之间可以相互转换
  • int可以转字符串
  • 字符串不可以直接转int 除了0123456789

7.扩展

pop()

1 set1 = {1, 2, 3, 4, 5, 6}
2 set2 = {'blue', 'red', 'green'}
3 print(set1.pop())  # 随机删除 如果是数值类型,会删除最小的那个
4 print(set2.pop())  # 如果是字符串类型的会随机删除
5 print(set1)

三、推导式

1.列表推导式

复制代码
 1 li = []
 2 for i in range(1, 11):  # 拿到偶数 2 4 6 8 10
 3     print(i)
 4     if i % 2 == 0:
 5         li.append(i)
 6 print(li)
 7 
 8 # 列表推导式 [表达式 for 变量 in 列表 if 条件]
 9 new_li = [i for i in range(1, 11) if i % 2 == 0]  # 对于简单我们可以使用列表推导式
10 # 对于复杂的 在读代码时并不能直接明白代码的意思
11 print(new_li)
复制代码

2.字典推导式

1)字典创建:字典key是1-5数字,value是这个数字的2次方

1 # 字典推导式 {键:值 for 变量 in 字典.items() if 条件}
2 dict1 = {i: i ** 2 for i in range(1, 6)}
3 print(dict1)

2)两个列表变成一个字典

复制代码
1 list1 = ['name', 'age', 'sex']
2 list2 = ['Tom', 20, '']
3 dict1 = {list1[i]: list2[i] for i in range(len(list1))}  # i对应值为0 1 2 作为下标去取值
4 
5 # 另一种方式:通过循环 list1中的每一个值作为键 list2的每一个值作为值 前提是要有一个空字典
6 dict1 = {}
7 for i in range(len(list1)):
8     dict1[list1[i]] = list2[i]
9 print(dict1)
复制代码

3)提取字典中的目标数据

1 computs = {'AUC': 268, 'HP': 125, 'DELL': 201, 'lenovo': 199, 'acer': 99}
2 count1 = {key: value for key, value in computs.items() if value >= 200}
3 print(count1)

注:先写for循环,再写for前表达式,代码是有逻辑性的,不是从头写到尾

3.集合推导式

1 # 集合推导式 {表达式 for 变量 in 列表 if 条件}
2 # 计算数字1,2,3的平方数
3 se = {i ** 2 for i in range(1, 4)}
4 print(se)
5 
6 set1 = {x for x in 'abcdefg' if x not in 'abc'}
7 print(set1)

4.元组推导式

1 # 元组推导式 (表达式 for 变量 in 列表 if 条件)
2 a = (i for i in range(1, 10))
3 print(tuple(a))
4 print(list(a))

 

posted @   梵星语  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示