python三元表达式、列表生成式

python三元表达式、列表生成式

一、简介

列表生成式是python内置的非常强大的创建列表的方式,基本的列表生成式包括至少一个for语句,0个或者多个if语句,并且支持嵌套。

二、详解

列表生成式一般有三种基本形式

1、三元表达式

语法:expression(1) if condition else expression(2)
参数:当条件condition满足时执行experssion(1),当条件不满足时执行expression(2)

2、不需要条件判断

语法:[expression(x) x for x in data]
参数:expression表示对x进行的操作,data是一个iterable可迭代的对象。

3、只需要正向的条件判断

语法:[expression(x) for x in data if condition]
参数:expression表示对x进行的操作,data是一个iterable可迭代的对象,condition表示需要满足的条件。

4、同时需要正向反向的条件判断

语法:[expression1(x) if condintion else expression2(x) for x in data]

这其实是一个列表生成器然后套用了一个三元表达式

参数:expresion1expression2表示对x进行的操作,data是一个iterable可迭代的对象,condition表示判断的条件

5、列表推导式for循环的嵌套

语法:[expression(x) for xs in data for x in xs if condition]
参数:expression表示对x进行的操作,data是一个iterable可迭代的对象,condition表示需要满足的条件

嵌套可以简单理解为从上到下,嵌套中for循环中各个for的顺序是怎样的,嵌套推导式中各个for表达式的顺序就是怎样的。

三、代码

1、三元表达式
b = 1
a = 0 if b % 2 == 0 else 1
print(a)
1
2、不需要条件判断的例子

对0~19之间的数都减5

lst = [i - 5 for i in range(20)]
print(lst)
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
3、需要正向条件判断的例子

例如我们需要删除上一个例子中获得列表中的负数元素

lst = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
new_lst = [i for i in lst if i >=0]
print(new_lst)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
4、需要正向与反向条件判断的例子

2中的例子,会使列表长度变短,但是有时候我们不希望改变列表的长度,我们可以用任意数字去填充负数的位置,这里用的是None

lst = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
new_lst = [i if i >= 0 else None for i in lst]
print(new_lst)
[None, None, None, None, None, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
5、for嵌套的例子

4.1
例如我需要将一个string拆分成一个字典,下面这个string表示人名所对应的年龄

string = "Alex:23|Jack:22|Eric:24"
name_dict = {key: int(value) for item in string.split('|') for key, value in (item.split(':'), )}
print(name_dict)
{'Alex': 23, 'Jack': 22, 'Eric': 24}

这一段代码可以帮助读者理解其中具体发生了什么

print({item for item in string.split('|')})
print({key:value for item in string.split('|') for key, value in (item.split(':'), )})
{'Alex:23', 'Jack:22', 'Eric:24'}
{'Alex': '23', 'Jack': '22', 'Eric': '24'}

4.2
这个例子是从男女生的名字中寻找含有两个或者两个以上字母e的名字。

all_data = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
            ['Susie', 'Casey', 'Jill', 'Ana', 'Eva', 'Jennifer', 'Stephanie']]

result = [name for names in all_data for name in names  if name.count('e') >= 2]
print(result)
['Jefferson', 'Wesley', 'Steven', 'Jennifer', 'Stephanie']

4.3
下面这个例子是将数据扁平化flatten

# flatten扁平化
some_tuples = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
flatten_tup = tuple(tup for tups in some_tuples for tup in tups)
flatten_tup, type(flatten_tup)
((1, 2, 3, 4, 5, 6, 7, 8, 9), tuple)

四、Reference

https://blog.csdn.net/wp1351553202/article/details/89211244

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值