Python 压缩长度为2的两个列表

Python 压缩长度为2的两个列表,python,list,Python,List,我想做的是假设给你两个列表,每个列表中有两个元素。如果取两个列表的zip,它会产生一个[x,y]或[y,x]形式的结果,那么它应该返回True,否则返回False。假设交换性成立。(x,y=y,x) 比如说x=[1,2]和y=[2,1] 压缩列表将得到->[[1,2],[2,1]],因为这与[x,y]相同,所以应该返回True 以下是我到目前为止的想法: print([list(i) for i in zip(x, y)] == [x, y] or [list(i) for i in zip(x

我想做的是假设给你两个列表,每个列表中有两个元素。如果取两个列表的zip,它会产生一个[x,y]或[y,x]形式的结果,那么它应该返回True,否则返回False。假设交换性成立。(x,y=y,x)

比如说x=[1,2]和y=[2,1]

压缩列表将得到->[[1,2],[2,1]],因为这与[x,y]相同,所以应该返回True

以下是我到目前为止的想法:

print([list(i) for i in zip(x, y)] == [x, y] or [list(i) for i in zip(x, y)] == [y, x])
我的代码的作用是:

x = [1, 2]
y = [2, 1]

[list(i) for i in zip(x, y)] -> [[1, 2], [2,1]]
[[1, 2], [2,1]] = [x, y] so return True.
因为左右两边相等,所以应该返回True

但我现在的问题是,假设x和y是:

x = [[1, 2], 2]
y = [1, [1, 2]]

[list(i) for i in zip(x, y)] -> [[[1, 2], 1], [2, [1,2]]]
这应该返回True,因为结果[[[1,2],1],[2[1,2]]]是[y,x],并且

[[1, 2], 1] = [1, [1, 2]] = y (commutative)
[2, [1,2]] = [[1, 2], 2] = x (commutative)

然而,我的返回值为False,我不知道哪里出错了。我想知道是否有人能指出我哪里出了问题,我能做些什么来解决它。

列表
是有序的,所以你需要检查第一个列表的每个元素是否在第二个列表中,比如:

a = [[1, 2], 1] 
b = [1, [1, 2]]

def equal(list1, list2):
    for i in a:
        if i not in b:
            return False
    return True

print equal(a,b)

您可以尝试类似的方法(根据@poke的建议,我做了一些轻微的更改):


列表是有序的,所以你需要排列所有的组合并测试相等性。我已经把这个问题读了三遍,我正在努力理解问题陈述。我不明白你的问题,但我认为你应该使用集合。你的“交换”(不是一个词)等于
x==y[:-1]
。谢谢贾斯汀!我想我在使用zip之类的东西时想得太多了。没想到会这么简单(基本上是两行)。顺便说一句,convergate是一个词(意思是“改变”,除非用于电),尽管这只是一个副词。
>>> def commutate(x, y):
    return x == y[::-1]

>>> x, y = [1, 2], [2, 1]
>>> commutate(x, y)
True
>>> commutate([[1, 2], 1], [1, [1, 2]])
True