我是靠谱客的博主 精明鞋垫,最近开发中收集的这篇文章主要介绍python推导式Pythonic,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

参考:Python推导式 - 最全用法

Pythonic

列表推导式

基本格式为:

  • [表达式 for 迭代变量 in 可迭代对象 <if 推导条件>]

  • [表达式 if 表达式条件 else 分支 for i in 序列 <if 推导条件>]

<if 推导条件> 可以省略。

# example
nums = []
for i in range(1, 101):
    nums.append(i*i)
print(nums)

这种代码就不够 Pythonic,项目里更常见的是推导式:

nums = [i*i for i in range(1, 101)]	# 生成1-100的平方的列表
nums = [i*i for i in range(1, 101) if i % 3 == 0] # 加入条件判断是否是3的倍数
nums = [i*i if i % 3 == 0 else i for i in range(1, 101)] #如果是3的倍数就平方,否则就数字本身

使用函数

推导所有1-100之间的所有质数

def is_run(year):
    if (year % 4) == 0:
        if (year % 100) == 0:
            if (year % 400) == 0:
                return True  # 整百年能被400整除的是闰年
            else:
                return False
        else:
            return True  # 非整百年能被4整除的为闰年
    else:
        return False


ryears = [f'闰{y}' if is_run(y) else y for y in range(1900, 2021)]
print(ryears)

嵌套表达式 - 不推荐使用

从 2000 年到 2021 年,生成每个月份:‘2000 年:1 月’, ‘2000 年:2 月’, ‘2020 年:3 月’, …, ‘2021 年:12 月’

monthes = [f'{y}年:{m}月' for y in range(2000, 2022) for m in range(1,13) ]

这里有两个for循环,类似于:

monthes = []
for y in range(2000, 2022):
    for m in range(1, 13):
        monthes.append(f'{y}年:{m}月')

推导巨大的列表 - 不要这么干!

推导出1到100亿之间的数字的平方,代码如下:

nums = [i * i for i in range(1, 10000000000)]	# 会很卡

使用生成器

  • 把方括号改成圆括号就可以了
nums = (i * i for i in range(1, 10000000000))
print(nums)
print(next(nums))
print(next(nums))
print(next(nums))

这是一个生成器,它不会一次性生成100亿个数字,只有调用 next() 的时候,它才会生成一个新的,返回给你。也就是说,同一个时间,只保存一个数字。

字典推导式

推导字典的方式和推导列表很相似,只不过:

  1. 使用大括号
  2. 使用键值对

推导一个包含数字和数字平方组成的字典:

nums_dict = {n: n * n for n in range(1, 101)}
print(nums_dict)

给字典按照分数排序

scores = {'麦叔': 59, '张三': 87, 'FGA': 78, '石石': 100, '莫名': 90}
sored_scores = {item[0]: item[1] for item in sorted(scores.items(), key=lambda item: item[1], reverse=True)}
print(sored_scores)
  1. 先把字典scores变成一个元组列表:scores.items()
  2. 用sorted函数给元组列表排序:sorted(scores.items(), key=lambda item:item[1], reverse=True)
  3. 排序过程用lambda指定使用元组的第二列排序:key=lambda item:item[1]。默认是是第一列。
  4. 指定倒着排序,也就是分数高的在前面:reverse=True
  5. 使用推导式,把排好序的元组列表,生成一个新的排好序的字典:{item[0]:item[1] for item in … }

集合推导式

推导集合的方式和列表是一样的,区别在于:

  1. 使用大括号,类似于推导字典,但它是单个元素,而不是键值对。
  2. 集合会自动过滤掉重复的元素。
  3. 集合是无序的。每次输出顺序不一样
names = [ '麦叔', '张三', ' 麦叔 ', 'FGA ', '张小三', 'FGA', '石石',' 莫名','莫名' ]
new_names = {n.strip() for n in names}
print(new_names)

lambda 表达式

基本语法:

lambda [参数1[参数2, … 参数n]]: 表达式

与map结合

list_1=[1,2,3]
list_2=[10,20,30]
print(list(map(lambda x,y:x+y,list_1,list_2)))	#输出 [11, 22, 33]

与reduce结合

from functools import reduce
print(reduce(lambda a,b: a+b ,[1,2,3,4])) # 输出10

与filter结合

num_list = [1,2,3,3,4,5,6,7,8,9,10]
print(list(filter(lambda  x : x % 2 == 0, num_list)))	# 输出 [2, 4, 6, 8, 10]

最后

以上就是精明鞋垫为你收集整理的python推导式Pythonic的全部内容,希望文章能够帮你解决python推导式Pythonic所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部