假设我有一个集s
,如下所示:
s = set([(1,2), (1,4), (2,6)])
我想检索我的集合中具有第一个元素1
的所有元组。通常我必须提供一个完整的元组,例如:
(1,2) in s
在这种情况下,我想要检索(1,_)
格式的所有元组,其中_
可以是任意数字。
关于如何做到这一点的任何想法?
编辑:为了清楚起见,我想用套装做这件事,因为我想要O(1)时间。我理解我可以遍历列表并收集第一个元素为1
的元组,但我正在寻找更快的东西。
我想为第一个元素使用单独的集合,为第二个元素使用第二个集合,但不确定我如何使用它来有效地检索。
谢谢!
答案 0 :(得分:2)
使用列表理解。
s = set([(1,2), (1,4), (2,6)])
print(set([i for i in s if i[0] == 1])) #Check if first value in tuple is 1
<强>输出:强>
set([(1, 2), (1, 4)])
答案 1 :(得分:2)
而不是s = set([(1,2), (1,4), (2,6)])
使用d = {(1,):[(2,),(4,)], ((2,):[(6,)]}
然后你可以生成以1开头的元组列表,最坏的情况是O(k)其中k是从一个特定值开始的最大元组数(希望很多)比O(n)更好。
进行查找:
[(1,) + x for x in d[(1,)]]
答案 2 :(得分:0)
一个简单的列表理解:
[t for t in s if t[0] == 1]
结果:
>>> s = set([(1,2), (1,4), (2,6)])
>>> [t for t in s if t[0] == 1]
[(1, 2), (1, 4)]
>>>
答案 3 :(得分:0)
为什么不将元组存储在numpy
数组中?
import numpy as np
s = np.array([[1,2], [1,4], [2,6]])
s[np.where(s[:,0] == 1)]
给你
array([[1,2], [1,4]])