python - 列表中列表之间的公共(public)列表

标签 python list coordinate

我需要能够在可变数量的列表之间找到第一个公共(public)列表(在本例中是坐标列表)。

即这个列表

>>> [[[1,2],[3,4],[6,7]],[[3,4],[5,9],[8,3],[4,2]],[[3,4],[9,9]]]

应该返回

>>> [3,4]

如果更简单,我可以使用包含坐标的列表之间的所有公共(public)列表(坐标)的列表。

我不能使用集合或字典,因为列表不可散列(我认为?)。

最佳答案

正确,list 对象不可散列,因为它们是可变的。 tuple 对象是可散列的(前提是它们的所有元素都是可散列的)。由于最里面的列表都是整数,这提供了解决列表不可散列性的绝好机会:

>>> lists = [[[1,2],[3,4],[6,7]],[[3,4],[5,9],[8,3],[4,2]],[[3,4],[9,9]]]
>>> sets = [set(tuple(x) for x in y) for y in lists]
>>> set.intersection(*sets)
set([(3, 4)])

这里我给你一个集合,其中包含所有子列表中存在的坐标元组。要像开始时那样获取列表列表:

[list(x) for x in set.intersection(*sets)]

成功了。

为了解决@wim 的问题,如果您真的想要引用 到交集中的first 元素(其中定义了first通过在 lists[0] 中排在第一位),最简单的方法可能是这样的:

#... Stuff as before
intersection = set.intersection(*sets)
reference_to_first = next( (x for x in lists[0] if tuple(x) in intersection), None ) 

如果交集为空,这将返回 None

关于python - 列表中列表之间的公共(public)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929091/

相关文章:

python - "Worksheet range names does not exist"openpyxl KeyError

python - 如何在一张背景图像上移动玩家?

python - 将 Python 字符串解释为条件语句?

python - 计算目录中多个csv文件的列数

java - 将通用对象传递给方法中的列表 - JAVA

python - 计算列表中的元素会产生意外结果

java - 从抽象类返回类型化列表变为非类型化/原始列表

ios - Storyboard xcode 上的坐标系令人困惑?

nosql - 如何从 NoSQL DBMS(如 DynamoDB)存储 GPS 坐标和搜索半径范围内的地点

python - 将故事分配给游戏中的位置的最佳方式?