压缩两个长度为2的列表

时间:2014-03-08 19:13:30

标签: python list

我想要做的是假设你有两个列表,每个列表中包含2个元素。如果你取两个列表的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,我无法弄清楚我哪里出错了。我想知道是否有人可以指出我出错的地方以及我可以做些什么来解决它。

2 个答案:

答案 0 :(得分:1)

你可能会尝试这样的东西(我根据@ poke的推荐稍微改了一下):

>>> 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

答案 1 :(得分:0)

List是有序的,因此您需要检查第一个列表中的每个元素是否为in第二个,如:

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)
相关问题