gpt4 book ai didi

python - 如何确定嵌套列表结构是否与另一个相同,但元素已交换为新元素

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:45 24 4
gpt4 key购买 nike

假设我们有两个嵌套列表:L1 = [[0, 1], [0, 2]]L2 = [[1, 2], [1, 3 ]]

问题是,一个列表中的整数与另一个列表中的整数之间是否存在将 L1 转换为 L2 的双射?对于上面给出的L1L2,答案是肯定的。

双射:

  • 旧的 0 变成新的 1
  • 旧的 1 变成新的 2
  • 旧的2变成新的3

回想一下我们的嵌套列表 L1 = [[0, 1], [0, 2]]。如果我们应用上面描述的映射,那么我们得到 L2 = [[1, 2], [1, 3]] 因此,foo(L1, L2) 应该返回foo 是我们要实现的相等运算符的名称。

此外,顺序无关紧要。每个列表都应被视为一个数学“集合”。

部分示例如下所示:

左列表:[[2, 1], [3, 1]]
右列表:[[1, 2], [1, 3]]:Truefoo(left,right) 返回 True
为什么?
顺序无关紧要

左列表:[[2, 1], [3, 1]]
右侧列表:[[1, 2], [3, 4]]
foo(left,right) 返回 False
为什么?
左列表中的两个整数相同,但右列表中的所有整数互不相同。

left= [[2, 1], [3, 1]]
= [[0, 1], [0, 1]]
foo(left, right) 返回 False
为什么?
右侧列表仅包含 2 个不同的整数(01)。左侧列表包含 3 个不同的整数(123)

一些较长的示例如下所示:

原始列表:[[0, 1], [0, 2], [1, 2], [1, 3], [0, 1, 2]]

A1: [[4, 1], [4, 0], [1, 0], [1, 3], [4, 1, 0]]:真

A2: [[4, 1], [4, 0], [1, 3], [1, 0], [4, 0, 1]]:真

B: [[1, 2], [3, 1], [2, 4], [1, 4], [2, 4, 1]]:真

C: [[3, 2], [5, 2], [5, 0], [0, 2], [5, 0, 2]]:真

D: [[5, 2], [5, 2], [3, 0], [0, 2], [5, 0, 2]]:假

E: [[3, 0], [0, 3], [5, 0], [0, 2], [5, 0, 2]]: 假

示例 A1 的双射:

ORIGINAL  A
0 4
1 1
2 0
3 3

A2 只是 A1

的重新排序

在示例 B 中,2 和 4 与原始列表中的 0 和 2 扮演相同的角色。 1 在两个列表中的角色相同,3 也是。

在示例 C 中,0 和 5 与原始列表中的 0 和 2 扮演相同的角色,2 与原始列表中的 1 扮演相同的角色,而 3 在两个列表中扮演相同的角色。在示例 D 中,有两个相同的子列表 ([5, 2]),而原始列表没有重复的子列表。在例子E中,所有4个长度为2的子列表都是0,而在原始列表中,所有4个长度为2的子列表都没有数字。

这是我从尝试中获得的代码,但是当将一个较小的数字(例如 0)交换为列表中最大的数字之一(例如 4)时,它不起作用。当它进行排序时,它无法识别 4 扮演着与 0 相同的角色。由于低数可以交换高数,因此排序将无法进行。

def CheckUnique(configs, newconfig):
sortednewconfig = sorted([sorted(i) for i in newconfig])
presentnumbers = []
canonicalnewconfig = []
for sub in sortednewconfig:
for i in sub:
if i not in presentnumbers:
presentnumbers.append(i)
for sub in sortednewconfig:
cansub = []
for i in sub:
cansub.append(presentnumbers.index(i))
canonicalnewconfig.append(cansub)
if canonicalnewconfig not in configs:
return True
else:
return False

最佳答案

allanyzip 一起使用:

>>> l = [[0, 1], [0, 2], [1, 2], [1, 3], [0, 1, 2]]
>>> l2 = [[4, 1], [4, 0], [1, 3], [1, 0], [4, 0, 1]]
>>> all([any(i in x for i in y) for x, y in zip(l, l2)])
True
>>> l3 = [[5, 2], [5, 2], [3, 0], [0, 2], [5, 0, 2]]
>>> all([any(i in x for i in y) for x, y in zip(l, l3)])
False
>>>

关于python - 如何确定嵌套列表结构是否与另一个相同,但元素已交换为新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56387815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com