Python中四元组的搜索

2024-04-25 06:44:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组四元组(“myTup”)和一个元组(“tupleToSearch”)。我需要把这个元组的所有实例搜索到每个四元组中tupleToSearch'将与每个四元组的前两个元素进行比较,如果匹配,则将报告匹配的四元组的最后两个元素。在

我用下面的代码来做同样的事情。在

myTup = set([('0994900', '50.2297', 'name1', '<4'),
             ('2176041', '24.2880', 'name2', 'POSITIVE'), 
             ('2240663', '51.2510', 'name3', '25.0'), 
             ('2240663', '51.2510', 'name4', '29.0'), 
             ('2240663', '51.2560', 'name4', '29.0')])

tupToSearch = ('2240663', '51.2510')


[(x[2],x[3]) for x in myTup if tupToSearch == (x[0],x[1])]

我需要扩展这段代码,这样它就可以在范围上执行比较,而不是精确搜索。在

例如,给定tupleToSearch = ('2240663', '51.2510'),我想找到第二个元素为>;=51.2510但小于(51.2510+偏移量)的四元组。这里‘offset’是一个常量。在

以上案例中的正确答案将报告最后三个四元数(每个四元中只有最后两个元素)。在

如何将第二个元素转换为数值以进行正确的比较。在

而且,我需要一个有效的方法来做这件事,因为我需要重复这一步骤将近十亿次。在


Tags: 实例代码元素报告事情元组setname1
2条回答

筛选出所需的元素,然后提取每个元素的块以创建结果。在

[(el[2], float(el[3])) for el in itertools.ifilter(lambda oel: oel[0] == search_tup[0] and float(search_tup[1]) <= float(oel[1]) <= float(search_tup[1]) + offset, my_tup)]

或者,用一个生成器在一个过程中完成整个过程(注意,与list comp不同,生成器将优雅地处理el[3]不能转换为float的情况)。在

^{pr2}$

请注意,由于这里使用的是浮点值,所以当浮点十进制值转换为浮点二进制值时,过滤过程将始终受到不精确性的影响。因此,您可能需要使用Decimal或在基值中构建偏移量。在

好吧,有一个float function,可以用来写这段代码:

low_target = float(tupToSearch[1])
high_target = low_target + constant
[(x[2],x[3]) for x in myTup if low_target<=float(x[1])<=high_target]

相关问题 更多 >