前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带你认识Python的列表推导式

带你认识Python的列表推导式

作者头像
stormwen
发布2019-08-05 10:53:31
4730
发布2019-08-05 10:53:31
举报
文章被收录于专栏:公众号:googpy

今天给大家分享几个Python里面的骚操作,大家会更加感受到Python编码的强大。

1.用字典映射代替switch case语句

大家首先看下面这段用C#编写的switch case代码,代码很好理解,switch函数传入一个参数day,参数的不同对应不同的case语句,那怎么将这段代码用Python里面的字典代替呢?

代码语言:javascript
复制
switch(day)
 {
     case 0:
      dayName = "Sunday";
       break;
     case 1:
       dayName = "Monday";
       break;
     case 2:
       dayName = "Tuesday";
       break;
     ...
     default:
       dayName = "Unknown";
      break;
 }

我的第一反应是if else条件语句,但是如果用条件语句的话,就体现不出现Python代码的强大了,条件语句是各种语言都通用的一种形式,再想想有没有其他的方法?

啊哈,我想到了字典,字典里面的键值对刚好可以映射这个业务功能,具体代码如下

代码语言:javascript
复制
day = 0
switcher = {
    0:'Sunday',
    1:'Monday',
    2:'Tuesday'
}

day_name = switcher.get(day,'Unknown')

print(day_name)

上面代码中用到一个Python内置函数get,get函数有很好的容错性,第一个参数就是day,第二个刚好对应switch case语句中的‘unknown’

但这样写还是用一定的局限性,有点基础的同学都知道,switch case之间可以随便扩展,写很多模块,那么这样一来,再把字典的值当作是一个常量就不合适了,因此,我们可以自定义函数,将函数作为一个参数传入字典中的值位置,具体代码如下

代码语言:javascript
复制
day = 0

def get_sunday():
    return 'Sunday'

def get_MOnday():
    return 'Monday'

def get_Tuesday():
    return 'Tuesday'

def get_default():
    return 'Unknown'

switcher = {
    0:get_sunday,
    1:get_MOnday,
    2:get_Tuesday
}

day_name = switcher.get(day,get_default)()   
print(day_name)

2.列表推导式

叫列表推导式不是说只能推导列表,至于它为什么叫这个,who care,还是通过一个实例来理解。

比如现在有一个列表,通过遍历列表,然后将每个元素平方后打印结果。

代码语言:javascript
复制
a = [1,2,3,4,5,6,7,8]


b = [i**2 for i in a]

print(b)

现在如果加一个条件,将列表中大于5的元素平方后打印结果,也很方便,直接在后面加一个if 条件判断

代码语言:javascript
复制
a = [1,2,3,4,5,6,7,8]
a1 ={1,2,3,4,5,6,7,8}      #集合推导

b = [i**2 for i in a if i>=5]
b1 = {i**2 for i in a if i>=5}

print(b)
print(b1)

3.字典推导列表推导式

刚才已经说了,不仅仅只有列表可以用列表推导式,那字典如何实现这个功能呢?

代码语言:javascript
复制
students = {
    '喜小乐':18,
    '石敢当':20,
    '横小五':15
}

b = {key for key,value in students.items()}
print(b)

通过上面的代码可以看出,首先字典的最外层是{},其次字典有key和value,再用一个内置函数items将字典的键或值提取出来。

当然,我们也可以将键和值颠倒一下

代码语言:javascript
复制
students = {
    '喜小乐':18,
    '石敢当':20,
    '横小五':15
}

b = {value,key for key,value in students.items()}
print(b)

最后,我们用这个看一下元组的列表推导式

代码语言:javascript
复制
students = {
    '喜小乐':18,
    '石敢当':20,
    '横小五':15
}

b1 = (key for key,value in students.items())   #元组推导列表推导式
print(b1)
代码语言:javascript
复制
<generator object <genexpr> at 0x000000000216A750>

运行代码,结果很奇怪,不能将键和值显示出来,而是出现generator,为什么会这样呢?因为元组是不可变的,这个知识点在前面学习过,不知道大家还有没有印象。

那怎么将键和值显示出来,具体代码如下:

代码语言:javascript
复制
students = {
    '喜小乐':18,
    '石敢当':20,
    '横小五':15
}

b1 = (key for key,value in students.items())   #元组推导列表推导式

for x in b1:
     print(x)

总结

列表推导式是一种非常简洁的创建列表的方式,很多时候我们需要创建一个满足特定要求的新列表,不得不用for循环创建,而用列表推导式来表达只需要一行代码即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 googpy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档