Python列表解析式、生成器解析式、集合解析式、字典解析式
2021-03-18 12:24
标签:load 处理 next error: c++ string invalid 选择 syntax 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于云+社区 ,作者:职场亮哥 在python中经常能够看到形如ret = [x ** 2 for x in lst]这样的赋值语句,对于从C++转到python的人不太容易理解这种for循环的使用,这就是python为了简洁而发明的新语法。python解析式有以下优点: python的解析式具体分为以下四种: 下面分别介绍这四种解析式的使用。 列表解析式的形式 可以发现效率是要稍高一点,最主要的还是代码简洁。 列表解析式可以和if语句一起使用 例如筛选出列表lst中的偶数: 列表解析式可以像for循环一样使用if语句。 列表解析式的for语句可以嵌套。 if语句的特殊用法 单行if语句的写法和列表解析式很像。 表达式形式:x if cond else y if和else必须同时存在。 下面以偶数求平方,奇数求立方为例进行演示 列表解析式返回的是一个列表,而生成器解析式返回的是一个解析式。列表解析式的中括号变成小括号就是生成器解析式了 列表解析式和生成器解析式的选择 将列表解析式的中括号换成大括号就是集合解析式了。 字典解析式使用的也是大括号,但是和集合解析式不同的是在expr处使用的不是单个元素而是k,v对。 这四种解析式中使用最广泛的还是列表解析式,会经常有一些很巧妙的用法。 Python列表解析式、生成器解析式、集合解析式、字典解析式 标签:load 处理 next error: c++ string invalid 选择 syntax 原文地址:https://www.cnblogs.com/hhh188764/p/13915081.htmlPython解析式
列表解析式
In [1]: lst = range(10)
In [2]: %%timeit
...: ret = [x ** 2 for x in lst]
...:
100000 loops, best of 3: 5.28 μs per loop
In [3]: %%timeit
...: ret = []
...: for x in lst:
...: ret.append(x ** 2)
...:
100000 loops, best of 3: 6.09 μs per loop # 耗时稍高
In [4]: ret = []
In [5]: for x in lst:
...: if x % 2 == 0:
...: ret.append(x) # 使用for循环
...:
In [6]: ret
Out[6]: [0, 2, 4, 6, 8]
In [7]: ret = [x for x in lst if x % 2 == 0] # 使用列表解析式
In [8]: ret
Out[8]: [0, 2, 4, 6, 8]
In [9]: (x, y) for x in range(0, 5) for y in range(5, 10)
File "
In [14]: ret = []
In [15]: for x in lst:
...: if x % 2 == 0:
...: ret.append(x ** 2)
...: else:
...: ret.append(x ** 3)
...:
In [16]: ret
Out[16]: [0, 1, 4, 27, 16, 125, 36, 343, 64, 729]
In [17]: x = 3
# if特殊用法
In [18]: x ** 2 if x % 2 == 0 else x ** 3
Out[18]: 27
In [19]: 3 if True else 4
Out[19]: 3
# 如果采用if特殊用法配合列表解析式 x if cond else y for ...
In [20]: [x ** 2 if x % 2 == 0 else x ** 3 for x in lst]
Out[20]: [0, 1, 4, 27, 16, 125, 36, 343, 64, 729]
生成器解析式
In [1]: range(10000)
Out[1]: range(0, 10000)
In [2]: g = (x ** 2 for x in range(100000000000))
In [3]: g
Out[3]:
集合解析式
In [1]: lst = [2, 4, 5, 6, 3, 4, 2]
In [2]: s = {x for x in lst}
In [3]: s
Out[3]: {2, 3, 4, 5, 6} # 可见列表解析式生成的时候会去掉重复,符合集合要求
In [4]: type(s)
Out[4]: set
字典解析式
In [1]: {str(x): x for x in range(5)}
Out[1]: {‘0‘: 0, ‘1‘: 1, ‘2‘: 2, ‘3‘: 3, ‘4‘: 4}
文章标题:Python列表解析式、生成器解析式、集合解析式、字典解析式
文章链接:http://soscw.com/index.php/essay/65767.html