Заменить n-ю подстроку на n-ю строку списков - PullRequest
1 голос
/ 14 июля 2020

У меня есть такая строка:

"initWithType:bundleIdentifier:uniqueIdentifier:"

и два таких списка:

['long long', 'id', 'id']
['arg1', 'arg2', 'arg3']

и хочу закончить строкой:

"initWithType:(long long)arg1 bundleIdentifier:(id)arg2 uniqueIdentifier:(id)arg3"

Как видите, мне фактически нужно заменить каждую n-ю точку с запятой на n-ю строку в каждом списке (плюс небольшое форматирование круглыми скобками и пробелом).

Я пытался использовать .format и оператор распаковки *, но безуспешно.

1 Ответ

6 голосов
/ 14 июля 2020

Вы можете использовать комбинацию форматирования строк с zip:

s1 = "initWithType:bundleIdentifier:uniqueIdentifier:"
l2 = ['long long', 'id', 'id']
l3 = ['arg1', 'arg2', 'arg3']

print(" ".join("{}:({}){}".format(a, b, c) for a, b, c in zip(s1.split(":"), l2, l3)))

Изменить: вы также можете использовать f-строки с Python> = 3.6, как это предлагается @flakes:

print(" ".join(f"{a}:({b}){c}" for a, b, c in zip(s1.split(":"), l2, l3)))

будет напечатано

initWithType:(long long)arg1 bundleIdentifier:(id)arg2 uniqueIdentifier:(id)arg3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...