交换列表列表中的两个值 (python)

Swap two values in a list of lists (python)

我想交换列表列表中两个元素的每次出现。我看过以前的答案,但它们与我想要做的不同。此外,我正在为此目的寻找一种简洁明了的方式(最好是列表理解)。

输入

my_list = [[1,2], [1,3], [1,4], [3,2]]

输出

my_list = [[2,1], [2,3], [2,4], [3,1]]

我正在尝试做这样的事情但没有成功:

[1 if i==2 else i, 2 if i==1 else i for i in my_list]

这是一个使用列表理解的简单解决方案:

my_list = [[1,2], [1,3], [1,4], [3,2]]

a = 1
b = 2
my_list = [[a if i==b else b if i==a else i for i in j] for j in my_list]

print(my_list) # [[2, 1], [2, 3], [2, 4], [3, 1]]

如果你想添加更多的元素来替换你可以使用字典:

swap = {
    1: 2,
    2: 1
}

my_list = [[swap.get(i, i) for i in j] for j in my_list]

其他人可能会用更好的答案回答,但这行得通。

def check(num):
    if num == 1:
        return 2
    elif num == 2:
        return 1
    else:
        return num

out = [[check(j) for j in i] for i in my_list]

如果您需要将 12 交换,此 one-liner 将起作用:

>>> my_list = [[1,2], [1,3], [1,4], [3,2]]
>>> print([[(lambda k: (1 if val == 2 else 2) if val in [1, 2] else val)(val) for val in sub_list] for sub_list in my_list])
[[2, 1], [2, 3], [2, 4], [3, 1]]

从右到左阅读第二行...分块阅读!