我正在使用一个包含(position, name)
形式的元组的集合,并且需要在忽略位置的同时检查集合中是否已经存在该名称的值。
有没有一种方法可以使用类似于value in my_set
的位置运算符,在比较过程中忽略元组中的位置变量,但仍然可以检索它?类似于(_, value) in my_set
或(*, value) in my_set)
,但它们都不起作用,第一个返回不正确的值,第二个引发SyntaxError。
显然,我可以使用像value in (tup[1] for tup in my_set)
这样的循环或生成器理解,但这不会从该元组中检索位置变量,我很好奇是否有某种形式的单行理解可以做到这一点。
发布于 2018-06-02 02:00:39
您可以在O(n)中使用现有的数据结构(迭代集合)完成此操作,但对于O(1),您必须更改数据结构。您将需要进行查找:
from collections import defaultdict
positions = defaultdict(list)
for position, name in my_set:
positions[name].append(position)
现在这是一个O(1)运算:
name in positions
按名称检索所有内容:
for pos in positions[name]:
...
如果您希望这与my_set
突变保持同步,那么您将需要在向my_set
添加/删除的同时添加用于更新positions
的钩子。彻底重新考虑底层数据结构可能会更好,例如,首先使用字典而不是集合。
https://stackoverflow.com/questions/50648736
复制相似问题