我有一个集合,如果另一个集合中有匹配项,我想更新它。否则,如果没有匹配项,我想将错误消息字符串附加到列表中。我引用了if/else in a list comprehension来编写代码
以下是我写的:
logstocrunch_set=dirlogs_set.difference(dblogs_set)
pattern = re.compile(r"\d*F[IR]P",re.IGNORECASE) #to find register values
logstocrunch_finset = set()
errorlist = []
logstocrunch_finset.update([x for x if pattern.search(x) else errorlist.append(f'{x} is not proper name') for x in logstocrunch_set])
然而,当我运行这个程序时,我得到了错误无效语法,arror指向我的if语句
那么为什么会发生这种情况呢
列表理解是创建单个列表的一种方法。基本条件表必须采用以下格式:
你不能(轻松地)用一种理解更新两个对象。另外,声明logstocrunch_finset和errorlist然后填充它们也没有多大意义。相反,像这样的事情怎么样:
以下更新-与for循环的性能比较
正如@Barmar所建议的,我对我们的两个解决方案进行了基准测试。里面没什么。这两种理解似乎能更好地处理更大的输入集。更改有效数据与无效数据的比率似乎没有多大区别
带条件的列表理解的语法为:
if <condition>
在iterable后面,而不是前面此外,这里不能有
else
子句。它不是返回不同值的条件表达式,它只是用来过滤迭代器中的值,所以else
没有意义您似乎将其与
<value>
部分中的条件表达式相混淆,它允许您根据条件指定要在结果列表中返回的不同值。这只是一个普通的条件表达式,不特定于列表理解如果要更新多个目标,则不应使用列表理解。使用普通循环
相关问题 更多 >
编程相关推荐