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