Python:基于元组的第一个值从集合中检索元组

时间:2018-04-01 15:55:56

标签: python

假设我有一个集s,如下所示:

s = set([(1,2), (1,4), (2,6)])

我想检索我的集合中具有第一个元素1的所有元组。通常我必须提供一个完整的元组,例如:

(1,2) in s

在这种情况下,我想要检索(1,_)格式的所有元组,其中_可以是任意数字。

关于如何做到这一点的任何想法?

编辑:为了清楚起见,我想用套装做这件事,因为我想要O(1)时间。我理解我可以遍历列表并收集第一个元素为1的元组,但我正在寻找更快的东西。

我想为第一个元素使用单独的集合,为第二个元素使用第二个集合,但不确定我如何使用它来有效地检索。

谢谢!

4 个答案:

答案 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]])