I was fiddling around with Python trying to learn some basics and while making a string replacer script I ran across a weird problem.
The following script was supposed to replace all instances of "Input" by each element in subs and print out all the replaced strings.
text = """ MyInput = GetSubsystem<Input>(); extern Input* MyInput; Input* MyInput = 0; """ texts = text.split("\n"); texts = filter(None,texts)#commenting this out fixes the iteration?? original = "Input"; subs = ["Time","WorkQueue","FileSystem","Log"] sortbysubs = 1 separate = 0 print("number of subs:{} \n".format(len(subs))) if (sortbysubs): for s in subs: for t in texts: print(t.replace(original,s)) if separate:print("") else: for t in texts: for s in subs: print(t.replace(original,s)) if separate:print("")
When sortbysubs = 0, it seems to work correctly: printing each line of text with each element in subs, and filtering out the empties beforehand.
When sortbysubs = 1, it only prints each text for the first element of subs.
Somehow there is a difference betweem printing "for s for t" rather than "for t for s".
Further more, this behaviour only emerges when filtering the texts for empties.
Commenting out the line "texts = filter(None,texts)" results in the problem disappearing.
Can anyone shed light on what exactly is happening here and how to fix it?
Top comments (1)
That makes sense!
Thanks for the help <3