Как поменять элементы для любого заданного списка? - PullRequest
0 голосов
/ 22 февраля 2020

Допустим, у меня есть список: ["5", "6", "4", "3"]

Я хочу заменить любой символ "5" на "6" и заменить "6" на "5".

Таким образом, список будет выглядеть примерно так:

["6", "5", "4", "3"]

Я хочу сделать это для всех списков, которые могут быть введены. Это означает, что не во всех списках будут элементы "5" и "6", но я хочу поменять 5 и 6 для списков, которые это делают.

Примечание: элементы в списке являются строковыми элементами. Не целые числа.

Я думал об использовании if операторов и .replace(), но это меняет 5 и 6, но затем возвращает его обратно.

Примеры:

if "5" in list1:
    list1.replace("5", "6")
if "6" in list1:
    list1.replace("6", "5")

Как видите, это просто заменяет его обратно. Не работает Было бы здорово, если бы кто-то мог помочь мне решить это.

Примечание. Если элемент находится в списке "1532", то 5 в нем также следует заменить строкой. И наоборот для 6.

Другой пример:

firstlist = ["125", "673", "222", "65"]`

Вывод:

firstlist = ["126", "573", "222", "56"]

Ответы [ 4 ]

3 голосов
/ 22 февраля 2020

Вот общая функция, которая выполняет перестановки путем итерации по символам в строках и ввода в dict, чтобы найти партнера для каждого заменяемого элемента. Этот метод может масштабироваться до любого количества произвольных перестановок, которые вы хотите включить; просто сделайте параметр swaps dict вместо x и y.

>>> def swap_all(lst, x, y):
...     swaps = {x: y, y: x}
...     return ["".join(swaps.get(c, c) for c in e) for e in lst]
...
>>> swap_all(["125", "64", "1", "5", "4", "65", "6"], "5", "6")
             ['126', '54', '1', '6', '4', '56', '5']
3 голосов
/ 22 февраля 2020

В предположении, что в ваших списках нет подчеркивания и вкладок, это может работать:

>>> list1 = ["126", "573", "222", "56"]
>>> str1 = "\t".join(list1)
>>> str1.replace("5", "_").replace("6", "5").replace("_", "6").split('\t')
['125', '673', '222', '65']
2 голосов
/ 22 февраля 2020

Я основывался на решении @ 0 0:

t = ['254', '556', '056', '30565']
[a.replace('5', '-').replace('6', '5').replace('-', '6') for a in t]
Output:
['264', '665', '065', '30656']
1 голос
/ 22 февраля 2020

Вы можете использовать простой символ для и заменить каждый символ следующим образом:

firstlist = ["125", "673", "222", "65"]

def switch(a, b, values):
    output = []
    for value_str in values:
        output.append(
            ''.join(
                a if b == v else b if a == v else v for v in value_str
            )
        )
    return output

print(switch('5', '6', firstlist))

>>> ['126', '573', '222', '56']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...