Aug-13-2020, 07:37 PM
Below is a test program to illustrate what I want to achieve. It is done using several for loops with intermediate variables.
Is there a way to combine these operations into one or two lines using list comprehension in some way? I have not been able to work out how to do this, so I would appreciate any advice you can provide.
Peter
Is there a way to combine these operations into one or two lines using list comprehension in some way? I have not been able to work out how to do this, so I would appreciate any advice you can provide.
Peter
# Input lists
l1 = ["abc\ndef\nghi\n", "jkl\nmno\npqr\n"]
l2 = ["123\n456\n789\n", "987\n654\n321\n"]
# Desired result list
lwant = ["abc|123\ndef|456\nghi|789\n", "jkl|987\nmno|654\npqr|321\n"]
print("from:\n", l1, "\n", l2, "\nwant:\n", lwant, "\n")
l1s = []
l2s = []
for ln in range(len(l1)):
l1s.append([])
l1s[ln] = l1[ln].splitlines()
l2s.append([])
l2s[ln] = l2[ln].splitlines()
print("after splitlines:\n", l1s,
"len(l1s)=%d,len(l1s[0])=%d\n" % (len(l1s), len(l1s[0])),
l2s, "len(l2s)=%d,len(l2s[0])=%d\n" % (len(l2s), len(l2s[0])))
lcomb = []
for ln in range(len(l1)):
lcomb.append([])
for sn in range(len(l1s[0])):
lcomb[ln].append([])
lcomb[ln][sn] = l1s[ln][sn] + "|" + l2s[ln][sn] + "\n"
print("after combining:\n%s" % lcomb, "\n")
ljoin = []
for ln in range(len(lcomb)):
ljoin.append("")
ljoin[ln] = "".join(lcomb[ln])
print("after join:\n", ljoin)Output:from:
['abc\ndef\nghi\n', 'jkl\nmno\npqr\n']
['123\n456\n789\n', '987\n654\n321\n']
want:
['abc|123\ndef|456\nghi|789\n', 'jkl|987\nmno|654\npqr|321\n']
after splitlines:
[['abc', 'def', 'ghi'], ['jkl', 'mno', 'pqr']] len(l1s)=2,len(l1s[0])=3
[['123', '456', '789'], ['987', '654', '321']] len(l2s)=2,len(l2s[0])=3
after combining:
[['abc|123\n', 'def|456\n', 'ghi|789\n'], ['jkl|987\n', 'mno|654\n', 'pqr|321\n']]
after join:
['abc|123\ndef|456\nghi|789\n', 'jkl|987\nmno|654\npqr|321\n']
