繁体   English   中英

如何在python中一起做一个衬里“ if”和“ for-loop”

[英]How to do one liner “if” and “for-loop” together in python

因此,我一直希望代码更干净,而且我陷入了一些可能很容易做到的事情。

基本上我目前所做的是:

for raw_product in r.json().get('data'):
    if raw_product.get('countdown') is False:
        print(raw_product.get('url'))

而且我一直在尝试找出如何将它制成一根衬纸。 到目前为止,我只是来

test = ['{}'.format(raw_product.get('url')) for raw_product in r.json().get('data')]

但是在一个内衬中,缺少if语句,我想知道是否有可能['{}'.format(raw_product.get('url')) for raw_product in r.json().get('data')]['{}'.format(raw_product.get('url')) for raw_product in r.json().get('data')]内应用if语句['{}'.format(raw_product.get('url')) for raw_product in r.json().get('data')]吗?

试试这个生成器:

 gen = (repr(x.get('url')) for x in r.json().get('data') if not x.get('countdown'))

或列出:

li = [repr(x.get('url')) for x in r.json().get('data') if not x.get('countdown')]

使此代码不干净的原因不是理解,而是此“获取”方法。 比较一下:

li = [x.url for x in r.json_data if not x.countdown] 比较清晰。

我不确定它是否更干净,但是您可以使用带有if过滤器的生成器表达式来在一行中获取这种模式:

[ print(rp.get('url')) for rp in r.json().get('data') if rp.get('countdown') is False ]

请注意,这样做效率低下,无法创建和记住整个None值列表(每个print调用的结果)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM