Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3:如何检查列表中的项目是否在列表中并打印它_Python_List_Python 3.x - Fatal编程技术网

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

Python 3:如何检查列表中的项目是否在列表中并打印它,python,list,python-3.x,Python,List,Python 3.x,我有一个列表,其中包含坐标 points = [[5821, 293], [3214, 872], [4218, 820], [1223, 90], [7438, 820]] 我需要找到一对具有相同点[I][1]的列表,然后打印它们。这个坐标只是举个例子。在代码中,它们是随机给出的。 如何执行此操作?您可以使用在每两个项目之间创建一系列对,并仅筛选出具有相同第二个项目的项目: from itertools import combinations result = [x for x in com

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

points = [[5821, 293], [3214, 872], [4218, 820], [1223, 90], [7438, 820]]
我需要找到一对具有相同点[I][1]的列表,然后打印它们。这个坐标只是举个例子。在代码中,它们是随机给出的。 如何执行此操作?

您可以使用在每两个项目之间创建一系列对,并仅筛选出具有相同第二个项目的项目:

from itertools import combinations
result = [x for x in combinations(points, 2) if x[0][1] == x[1][1]]

我不确定我是否正确理解了这个问题,但以下是我的方法

顺便说一下,我使用的是python 3.5.2

如果您的目的是捕获所有具有[1]或y坐标(取决于您如何看待)且值为820的列表,那么代码可能是:

for i in points:
    if i[1] == 820:
        print(i)

对于您当前的数据结构,没有简单有效的方法来完成您想要的任务

您可以使用低效的方法(
O(N**2)
),也可以将数据转换为另一种格式,以便使用更高效的算法

是进行
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)

这是一个生成器,它将
生成具有匹配
y
值的点对。它应该使用
O(N)
空格和
O(N+R)
时间(对于
N
输入点和
R
匹配对)。

以下是适用于您的代码:

 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=[]
_列表=[[5821293]、[3214872]、[4218820]、[122390],
[7438, 820]]
对于_列表中的i:
第二个_list.append(i[1])
重复=[]
新列表=已排序(第二个列表,key=int)
对于范围内的i(len(新列表)):
如果i+1

第二个列表存储列表的y坐标。然后,程序按升序对y坐标列表进行排序,并将它们附加到新列表中。最后,我们在新列表上循环,看看后面的数字是否相等,如果相等,将它们附加到列表中。然后,我们在_列表上循环,看看是否有重复的点。如果是这样的话,我们就把整个东西都打印出来。我希望这能有所帮助。

你能稍微澄清一下你的意图吗?你正在试图找到所有具有相同y值的坐标,然后打印出来?@BrandonIbbotson是的。我是编程新手,不太懂Yet你的问题应该给出你展示的例子的答案。然后,它应该包含一些构成严重尝试但不起作用的代码。因此,这不是一个代码编写服务,特别是对于看起来像家庭作业问题的服务。首先,假设你有一堆卡片,每一张都有一对坐标。你会怎么解决这个问题。有两种不同的可能方法。同一个Y值的出现次数不能超过两次,对吗?如果不允许我使用itertools,你可以用一对嵌套循环和一个常规的
if
语句来做同样的事情。我猜OP不想只捕获820的Y坐标。它应该更一般一些。或者类似这样:对于点中的i:对于点中的j:if i[1]==j[1]和i!=j:打印(j)