python переименование элемента списка на основе другого списка

#python #list #rename #re

#python #Список #переименовать #python-re

Вопрос:

У меня есть два списка следующим образом

 A=['a','b','c']

B=['0_txt1','0_txt2','1_txt1','1_txt2','2_txt1','2_txt2']
 

Я должен переименовать номер префикса в элементах B с соответствующим элементом списка из A, поэтому желаемый результат:

 B=['a_txt1','a_txt2','b_txt1','b_txt2','c_txt1','c_txt2']
 

Как я могу это сделать, прочитав и заменив элементы? Спасибо!

Комментарии:

1. Не могли бы вы показать нам, что вы пробовали?

Ответ №1:

Использование понимания списка:

 B = [x.replace(x.split("_")[0],  A[int(x.split("_")[0])], 1) for x in B]
 

Или использование оператора Walrus (Python 3.8 ), чтобы избежать двойного вычисления x.split(«_»)[0]

 B = [x.replace((p:=x.split("_")[0]),  A[int(p)], 1) for x in B]
 

Комментарии:

1. Очень хорошо с оператором Walrus. Мы также можем удалить 1 в команде replace, верно?

2. @physiker—1 предназначен для того, чтобы такие строки, как «172.16.254.1» (IP-адрес), не считались числом.

Ответ №2:

Попробуйте понять список с помощью строк формата, enumerate и zip

 A=['a','b','c']

B=['0_txt1','0_txt2','1_txt1','1_txt2','2_txt1','2_txt2']

C = [f"{z}_{x.split('_')[1]}" for x in B for y,z in enumerate(A) if x.split('_')[0] == str(y)]

print(C)
 

Ответ №3:

Вот простой цикл, который будет проходить и проверять, соответствуют ли индексы A старшим номерам элементов в B, затем замените числа соответствующим образом

 C = []

for string in B:
    for x in A:
        if string.startswith(str(A.index(x))):
            C.append(string.replace(str(A.index(x)), x, 1))