将我的长语句转换为列表理解

时间:2018-07-26 21:54:41

标签: python list-comprehension

目前,我有一个这样的语句效果很好:

if (l['key'] != "0") and (l['key'] != "") and (l['key'] != 'm3u8') and ('HIT' not in k['key']) :

我是列表理解的新手,所以我每次想排除扩展名时都没有添加(l ['key']!=“ something”),而是尝试这样做:

ext_group=["",'m3u8','0']
url_strings =['m3u8','test1','0','gif','potato']

if any(ext not in url_strings for ext in ext_group):

但是这不起作用。通常在循环中,我只能说“ print ext”,但是在这种情况下,我没有定义它会出错。如果我尝试打印出url_strings,它将打印出完整列表,而不是仅打印出尚未过滤掉的项目。

我在这里做错了什么,或者我不明白什么?

EDIT尝试执行此操作,但它也没有过滤,通过不过滤,我仍然看到打印出l ['key']的“”,'m3u8','0'值

for ext in ext_group:
     if (l['key']!= ext) and ('HIT' not in k['key']) :
         print l['key']

1 个答案:

答案 0 :(得分:0)

根据我的理解,如果值在['','m3u8','0']左右,并且另一个JSON对象具有“ key”值作为列表,并且列表不应该包含,则您尝试从键中过滤出JSON对象将'HIT'作为元素。

您在列表理解中所做的尝试几乎是正确的,但在理解列表理解时出现了错误。

考虑以下代码:

ext_group=["",'m3u8','0']
url_strings =['m3u8','test1','0','gif','potato']

proper_values = []
for ext in url_strings:
    if ext not in ext_group:
        proper_values.append(ext)

这是您打算在列表理解中执行的操作,但是您已经切换了必须在for loop中进行迭代并要检查if条件的列表。

代替

if any(ext not in url_strings for ext in ext_group)

您应该和

一起去的
if any ([ext for ext in url_strings if ext not in ext_group])

您也可以在同一张支票中添加第二个条件。像

if any([i for i in url_strings if i not in ext_group]) and ('HIT' not in k['key']):

希望您有想要的东西。否则将您的问题发表为评论。