在元组列表中按内部元组查找元素



>好吧。所以我已经经历了一些 SO 答案,例如在 python 的元组列表中查找元素,它们似乎并不特定于我的情况。而且我不知道如何在我的问题中使用它们。

假设我有一个元组的列表;即该列表存储了几个数据点,每个数据点都指向一个笛卡尔点。每个外部元组表示点的整个数据。在这个元组中有一个内部元组,这正是重点。也就是说,让我们取点 (1,2( 并有 5 表示这一点的一些含义。外部元组将((1,2),5)

好吧,很容易弄清楚如何生成它。但是,我想根据内部元组的值搜索外部元组。这就是我想做的:

for y in range(0, 10):
for x in range(0, 10):
if (x, y) in ###:
print("Found")

或这种意义上的东西。如何做到这一点?


根据@timgen作为评论发布的建议,这里有一些伪样本数据。
名单将是

selectPointSet = [((9, 2), 1), ((4, 7), 2), ((7, 3), 0), ((5, 0), 0), ((8, 1), 2)]

因此,我可能想遍历从 (0,0( 到 (9,9( 的点的整个域,如果该点是selectPointSet中的一个,则执行一些操作;即如果它是 (9, 2(、(4, 7(、(7, 3(、(5, 0( 或 (8, 1(

使用您当前的数据结构,您可以像这样执行此操作:

listTuple = [((1,1),5),((2,3),5)] #dummy list of tuples
for y in range(0, 10): 
for x in range(0, 10):
for i in listTuple:#loop through list of tuples
if (x, y) in listTuple[listTuple.index(i)]:#test to see if (x,y) is in the tuple at this index
print(str((x,y)) , "Found")

您可以使用字典。

temp = [((1,2),3),((2,3),4),((6,7),4)]
newDict = {}
# a dictionary with inner tuple as key
for t in temp:
newDict[t[0]] = t[1]
for y in range(0, 10):
for x in range(0, 10):
if newDict.__contains__((x,y)):
print("Found")

我希望这就是你的要求。

从 O(1( 查找的双元素元组中创建一个集合。

>>> data = [((1,2),3),((2,3),4),((6,7),4)]
>>> tups = {x[0] for x in data}

现在,您可以使用您喜欢的任何元组查询tups

>>> (6, 7) in tups
True
>>> (3, 2) in tups
False

搜索 0 到 9 之间的值:

>>> from itertools import product
>>> for x, y in product(range(10), range(10)):
...     if (x, y) in tups:
...         print('found ({}, {})'.format(x, y))
...         
found (1, 2)
found (2, 3)
found (6, 7)

如果您需要保留有关第三个数字的信息(并且data中的双元素内部元组是唯一的(,那么您还可以构造字典而不是集合。

>>> d = dict(data)
>>> d
{(1, 2): 3, (2, 3): 4, (6, 7): 4}
>>> (2, 3) in d
True
>>> d[(2, 3)]
4

最新更新