打印列表理解列表理解中不存在的搜索词

时间:2013-07-09 18:07:45

标签: python jython

我是Python的初学者,我试图在一行代码中做一些事情。

resourceProperties = 'test test token test'
rpAttrs = [ ['ajgagag', 'knkagga'], ['token', 'knkagga'], ['ajgagag', 'knkagga'] ]

for value in rpAttrs if not list(re.finditer(value[0], resourceProperties)) : print value[0]

我收到以下错误,并且不确定到底出了什么问题,因为我看到过类似的Python代码,其中if后面紧跟着一个for。

  

SyntaxError:语法无效

错误指向if

我的目标是在rpAttrs中打印resourceProperties中未出现的每个搜索字词。我很想尝试只在一行代码中执行此操作。谁能告诉我我做错了什么?

4 个答案:

答案 0 :(得分:3)

list_comp = [value[0] for value in rpAttrs if not list(re.finditer(value[0], resourceProperties))]
>> ['ajgagag', 'ajgagag']

是理解的正确方法

答案 1 :(得分:1)

你可以尝试这个,这是你的循环和条件的更多pythonic版本:

import re
resourceProperties = 'test test token test'
rpAttrs = [['ajgagag', 'knkagga'], ['token', 'knkagga'], ['ajgagag', 'knkagga']]

print('\n'.join(value[0] for value in rpAttrs if not list(re.finditer(value[0], resourceProperties))))

输出:

ajgagag
ajgagag

答案 2 :(得分:1)

你在for语法中缺少冒号python所期望的。你应该分解你的for / if块,这样可以更容易阅读并捕获像这样的bug。这应该有效:

for value in rpAttrs:
    if not list(re.finditer(value[0], resourceProperties)):
        print value[0]

作为附注,这里没有列表推导,只列出了列表。列表推导是用于在列表(或类似列表)上操作以创建新列表的语法,例如:

oddSquares = [number**2 for number in myListOfNumbers if (number % 2) == 1]

答案 3 :(得分:1)

根据OP的确认,只需要进行“收容”检查

>>> print [value[0] for value in rpAttrs if not value[0] in resourceProperties]
['ajgagag', 'ajgagag']