Python 3:如何检查列表中的项目是否在列表中并打印出来

时间:2017-01-28 16:49:11

标签: python list python-3.x

我有一个列表列表,其中包含坐标

points = [[5821, 293], [3214, 872], [4218, 820], [1223, 90], [7438, 820]]

我需要使用相同的 point [i] [1] 找到一对列表,然后打印它们。例如,这个坐标就是给出的。在代码中,它们是随机给出的。 怎么做?

4 个答案:

答案 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并查看是否有任何点重复。如果是这样,我们打印整个东西。我希望有所帮助。