我有一个列表列表,其中包含坐标
points = [[5821, 293], [3214, 872], [4218, 820], [1223, 90], [7438, 820]]
我需要使用相同的 point [i] [1] 找到一对列表,然后打印它们。例如,这个坐标就是给出的。在代码中,它们是随机给出的。 怎么做?
答案 0 :(得分:1)
您可以使用itertools.combinations在每两项之间创建一系列对,并仅过滤掉具有相同第二项的对:
from itertools import combinations
result = [x for x in combinations(points, 2) if x[0][1] == x[1][1]]
答案 1 :(得分:0)
我不确定我是否正确理解了这个问题,但这是我的方法。
顺便说一句,我使用 python 3.5.2 。
如果你的意图是用[1]或y坐标捕获所有列表(取决于你如何看待它),值为820,那么代码可能是:
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
答案 2 :(得分:0)
使用您当前的数据结构,没有简单有效的方法来完成您想要的任务。
您可以使用效率低下的方法(O(N**2)
),也可以将数据转换为另一种可以使用更高效算法的格式。
Mureinik's answer是进行O(N**2)
搜索的好方法,因此我将提供一种使用字典快速进行检查的解决方案:
def find_matches(points):
dct = {}
for x, y in points:
for other_x in dct.setdefault(y, []):
yield (x, y), (other_x, y)
dct[y].append(x)
这是一个生成器,它将yield
个具有匹配y
值的点对。它应该使用O(N)
空格和O(N+R)
时间(用于N
输入点和R
对匹配)。
答案 3 :(得分:0)
以下是适合您的代码:
second_list = []
the_list = [[5821, 293], [3214, 872], [4218, 820], [1223, 90],
[7438, 820]]
for i in the_list:
second_list.append(i[1])
repeated = []
the_new_list = sorted(second_list, key=int)
for i in range(len(the_new_list)):
if i + 1 < len(the_new_list):
if the_new_list[i] == the_new_list[i+1]:
repeated.append(the_new_list[i])
for i in the_list:
if i[1] in repeated:
print(i)
second_list存储列表的y坐标。然后,程序按升序对y坐标列表进行排序,并将它们附加到the_new_list。最后,我们遍历the_new_list并查看彼此之后的任何数字是否相等,如果是,则将它们附加到重复的列表中。然后,我们遍历the_list并查看是否有任何点重复。如果是这样,我们打印整个东西。我希望有所帮助。