首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >忽略元组比较中的值,但仍在检索它

忽略元组比较中的值,但仍在检索它
EN

Stack Overflow用户
提问于 2018-06-02 01:54:54
回答 1查看 79关注 0票数 1

我正在使用一个包含(position, name)形式的元组的集合,并且需要在忽略位置的同时检查集合中是否已经存在该名称的值。

有没有一种方法可以使用类似于value in my_set的位置运算符,在比较过程中忽略元组中的位置变量,但仍然可以检索它?类似于(_, value) in my_set(*, value) in my_set),但它们都不起作用,第一个返回不正确的值,第二个引发SyntaxError。

显然,我可以使用像value in (tup[1] for tup in my_set)这样的循环或生成器理解,但这不会从该元组中检索位置变量,我很好奇是否有某种形式的单行理解可以做到这一点。

EN

回答 1

Stack Overflow用户

发布于 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的钩子。彻底重新考虑底层数据结构可能会更好,例如,首先使用字典而不是集合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50648736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档