小白笔记
仅记录常规操作中较为不熟悉的操作类型
1、list(str)/str.split():列表中的元素为字符类型
>>> s='1,3,6,9,2,5,1'
>>> s=list(s)
>>> s
# ['1',',','3',',','6',',','9',',','2',',','5',',','1']
>>> s='1,2,3,4'
>>> s=s.split(',')
>>> s
# ['1','2','3','4']
2、对于数字字符串要转换为列表类型,需要加eval函数,非数字字符串不可用否则会报错
>>> s='1,3,6,9,2,5,1'
>>> s=list(eval(s))
>>> s
# [1, 3, 6, 9, 2, 5, 1]
>>> s='a,b,c'
>>> c=list(eval(s))
Traceback (most recent call last):
File "", line 1, in
c=list(eval(s))
File "", line 1, in
NameError: name 'a' is not defined
3、对于列表定义,非数字元素需要加引号,否则会报错
>>> f=[a,b,c]
Traceback (most recent call last):
File "", line 1, in
f=[a,b,c]
NameError: name 'a' is not defined
>>> f=[1,2,3]
>>> f
# [1, 2, 3]
注:列表类型可以使用 "+" 来为列表增加元素,可见如下杨辉三角的生成器实例:
def triangles():
L = [1]
while 1:
yield L
L = [0] + L + [0]
L = [L[i] + L[i + 1] for i in range(len(L) - 1)]
4、关于字典定义,其中非数字元素必须为字符串形式(即:必须有引号),键值都是
>>> d = {china:beijing,usa:newyork}
Traceback (most recent call last):
File "", line 1, in
d = {china:beijing,usa:newyork}
NameError: name 'china' is not defined
>>> d = {'a':2,'b':3}
>>> d
# {'a': 2, 'b': 3}
5、字典中:k in d 仅用于判断某一键 k 是否在字典 d 中
6、ls.remove(x) 将列表ls中出现的第一个元素x删除,不会生产新的列表,是对原列表进行修改
7、d.get(k,
8、d.pop(k,
>>> d = {'中国':'北京','美国':'华盛顿','法国':'巴黎'}
>>> d.get('中国','罗马')
# '北京'
>>> d.get('慕尼黑','罗马')
# '罗马'
>>> d.pop('中国','罗马')
# '北京'
>>> d.pop('慕尼黑','罗马')
# '罗马'
>>> d
# {'美国': '华盛顿', '法国': '巴黎'}
9、列表生成式
列表生成式就是一个用来生成列表的特定语法形式的表达式,它是一种语法糖。
语法糖是指计算机语言中,某些特定功能用一种简洁方便的语法实现,以代替常规语法(比如电话中的快速拨号:用“长按1” 来呼叫特定联系人,以替代拨打完整的电话号码)
基础语法格式
[exp for iter_var in iterable]
工作过程:
迭代iterable中的每个元素; # iterable:迭代对象
每次迭代先把结果赋给iter_var,后通过exp得到一个新值; # exp:表达式
最后把所有通过exp得到的计算值以一个新列表的形式返回。
相当于这样的过程:
L = []
for iter_var in iterable:
L.append(exp)
实例:生成一个2n+1的数字列表,n为从3到11的数字
list1 = [2*n + 1 for n in range(3, 11)]
带过滤功能语法格式
[exp for iter_var in iterable if_exp]
工作过程:
迭代iterable中的每个元素,每次迭代都先判断if_exp表达式结果为真,如果为真则进行下一步,如果为假则进行下一次迭代;
把迭代结果赋值给iter_var,然后通过exp得到一个新的计算值;
最后把所有通过exp得到的计算值以一个新列表的形式返回。
相当于这样的过程:
L = []
for iter_var in iterable:
if_exp:
L.append(exp)
实例:过滤出一个指定的数字列表中值大于20的元素
L = [3, 7, 11, 14,19, 33, 26, 57, 99]
list2 = [x for x in L if x > 20]
循环嵌套语法格式
[exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
工作过程:
每迭代iterable_A中的一个元素,就把ierable_B中的所有元素都迭代一遍。
相当于这样的过程:
L = []
for iter_var_A in iterable_A:
for iter_var_B in iterable_B:
L.append(exp)
实例:计算两个集合的全排列,并将结果作为保存至一个新的列表中
L1 = ['香蕉', '苹果', '橙子']
L2 = ['可乐', '牛奶']
list3 = [(x, y) for x in L1 for y in L2]
10、生成器
按照某种算法不断生成新的数据,直到满足某一个指定的条件结束
构造生成器的两种方式:
- 使用类似列表生成式的方式生成
(2*n + 1 for n in range(3, 11)) # 把列表生成式中的 [] 改为 () 即可
- 使用包含yield的函数来生成
实例:
def my_range(start, end):
for n in range(start, end):
yield 2*n + 1 # 生成器函数,在执行时遇到yield的时候,函数返回(中断),只有下次调用时才会继续执行后续语句(从上次中断的位置继续)
print('测试执行过程')
g1 = my_range(3, 6)
利用next() 函数来遍历生成器(可以用for循环遍历)
第一次遍历
print(next(g1))
结果是:
7
第二次遍历
print(next(g1))
结果是:
测试执行过程
9
需要说明的是:如果生成器函数有返回值,要获取该返回值的话,只能通过在一个while循环中不断的next(),最后通过捕获StopIteration异常
参考链接:
https://www.cnblogs.com/yyds/p/6281453.html
https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128