3

我是 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

我的目标是打印rpAttrsresourceProperties. 我很想尝试只用一行代码来做到这一点。谁能告诉我我做错了什么?

4

4 回答 4

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

将是进行理解的正确方法

于 2013-07-09T18:14:42.380 回答
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
于 2013-07-09T18:12:14.200 回答
1

您在 for 语法中缺少 python 期望的冒号。你应该分解你的 for/if 块,这样更容易阅读和捕捉像这样的错误。这应该有效:

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]
于 2013-07-09T18:19:05.447 回答
1

基于 OP 确认只需要“遏制”检查

>>> print [value[0] for value in rpAttrs if not value[0] in resourceProperties]
['ajgagag', 'ajgagag']
于 2013-07-09T18:44:12.197 回答