>好吧。所以我已经经历了一些 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