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

2024-04-26 21:51:28 发布

您现在位置: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]

Tags: 答案in目的元素列表forifmy
3条回答

其他人可能会用更好的回答,但这会奏效

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]

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

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]

如果需要将12进行交换,则此一行程序将起作用:

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

read the second line from right to left... in chunks!

相关问题 更多 >