我是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
中未出现的每个搜索字词。我很想尝试只在一行代码中执行此操作。谁能告诉我我做错了什么?
答案 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']