Replace nth Substring With nth Strings of Lists

I have a string like so:

"initWithType:bundleIdentifier:uniqueIdentifier:" 

and two lists like so:

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

and want to end up with the string:

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

As you may see, I effectively need to replace every nth semicolon with the nth string in each list (plus a little formatting with parentheses and a space).

I have been trying to use .format and the * unpacking operator but have had little success.

Add Comment
1 Answer(s)

You can use a combination of string formatting with 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))) 

Edit: you can also use f-strings with Python >= 3.6 as suggested by @flakes:

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

this will print

initWithType:(long long)arg1 bundleIdentifier:(id)arg2 uniqueIdentifier:(id)arg3 
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.