python 编程开发 —— 推导式创建序列

文档声明:
以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。


笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
如果存在相关知识点的遗漏,可以在评论区留言,看到后将在第一时间更新。
作者:Aliven888

1、背景

  推导式创建序列 —— 推导式是Python经典的风格。推导式是从一个或者多个迭代器快速创建序列的一张方法,它可以将循环与条件判断结合,从而避免冗长的代码。

2、列表推导式

  通过列表式推到生成列表对象。

注意事项:

  • 集合推导式使用的是中括号[]

格式:

[表达式 for item in 可迭代对象] 

or 

[表达式 for item in 可迭代对象 if 判断条件]
>>> [x for x in range(1,5)] 
[1, 2, 3, 4]
>>> [x*2 for x in range(1, 5)]  #表示式计算,直接打印
[2, 4, 6, 8]
>>> a = [x*2 for x in range(1, 5)] #变量接收参数
>>> a
[2, 4, 6, 8]
>>> [x for x in range(1,20) if x%5==0] # 带有判断条件
[5, 10, 15]

3、字典推导式

 通过列表式推到生成字典对象(字典推导式中也可以有 for 循环或者 if 判断条件)。

格式:

{
    
    key:value for 表达式 in 可迭代对象}

注意事项:

  • 字典推导式使用的是大括号 {}
>>> a = '123456789456123987'
>>> char_cout = {
    
    c:a.count(c) for c in a}  #统计字符串中字符出现的次数
>>> char_cout
{
    
    '1': 2, '3': 2, '2': 2, '5': 2, '4': 2, '7': 2, '6': 2, '9': 2, '8': 2}
>>> 
>>> char_cout = {
    
    c:a.count(c) for c in a if c != '9'} # 加上判断条件
>>> char_cout
{
    
    '1': 2, '3': 2, '2': 2, '5': 2, '4': 2, '7': 2, '6': 2, '8': 2}

4、集合推导式

  通过集合式推到生成集合对象(和集合推导式类似,也可以有 for 循环或者 if 判断条件)。

格式:

{
    
    表达式 for each in 可迭代对象} 

or 

{
    
    表达式 for each in 可迭代对象 if 条件判断}

注意事项:

  • 集合推导式使用的是大括号 {}
>>> {
    
    x*3 for x in range(6) if x%2==0}
set([0, 12, 6])
>>> b = {
    
    x*3 for x in range(6) if x%2==0}
>>> b
set([0, 12, 6])

5、生成器推导式(生成元组)

格式:

(x for x in 可迭代对象)

注意事项:

  • 集合推导式使用的是小括号()
  • 生成器对象可以通过迭代获取其元素值,但是只能被迭代一次,第二次就没有数值了。
>>> (x for x in range(1,5))
<generator object <genexpr> at 0x0530BB48>  # 提示是一个生成器对象,表明元组没有推导式
>>> d = (x for x in range(1,5))
>>> d
<generator object <genexpr> at 0x0530B9E0> # 提示是一个生成器对象,表明元组没有推导式
>>> for x in d: print(x) # 生成器对象可以通过迭代获取其元素值,但是只能被迭代一次

1
2
3
4
>>> for x in d: print(x) #第二次迭代内容空了

>>> 
>>> print(tuple(d)) #打印元组(生成器对象被转化后),发现是个空元组
()
>>> 

猜你喜欢

转载自blog.csdn.net/Aliven888/article/details/115294098