49 AnswersNew Answer
49 AnswersNew Answer
#Oneliner a = [0,1,2,3,5,6] b = [4,5,6] print(sum([[i, j] for i, j in zip(a, b)] + [a[len(b):]] or [b[len(a):]], ))
This would be an inelegant way I suppose... a, b = [0, 1, 2, 3, 4], [5, 6, 7] c =  for i in range(min((len(a), len(b)))): c.append(a[i]) c.append(b[i]) c.extend(a[i+1:] or b[i+1]) print(c)
Yeah, the efficiency problem remains: We create stuff we don't want.
What mean is: When you look at it, you should feel like damn, THAT'S how you do it, why didn't I think of that?
I think this is most pythonic: [x for x in chain.from_iterable(zip_longest(a, b)) if x is not None] I also have another solution with pop() that consumes the original lists. https://code.sololearn.com/ctGh1XLDz1nt/?ref=app
𝐊𝐢𝐢𝐛𝐨 𝐆𝐡𝐚𝐲𝐚𝐥 Sami Khan my lists are not equal length 😒
There's itertools.zip_longest, which fills up the shorter iterables with None.
Oma Falk HonFu like this 👇 import itertools a=[0,1,2,3] b=[4,5,6] print(list(itertools.zip_longest(a,b, fillvalue ='_' ))) Output : [(0, 4), (1, 5), (2, 6), (3, '_')]
That will fill _ into the list, 𝐊𝐢𝐢𝐛𝐨 𝐆𝐡𝐚𝐲𝐚𝐥. Sure, you can filter after that, but you're then losing elegance.
Oma Falk Done import itertools a=[0,1,2,3] b=[4,5,6] print(list(itertools.zip_longest(a,b))) output : [(0, 4), (1, 5), (2, 6), (3, None)]
Hello are we on planet earth 👽 https://code.sololearn.com/cXiKi3ovUxTm/?ref=app Oma Falk
Not elegant but the most efficient and readable I could find. https://code.sololearn.com/c501xOJcSnQY/?ref=app [Edit] Oma Falk #len(l2) >= len(l1) res = [n for x in zip(l1,l2) for n in x] + l2[len(l1):] I found the way to flatten a tuple here: https://stackoverflow.com/questions/3204245/how-do-i-convert-a-tuple-of-tuples-to-a-one-dimensional-list-using-list-comprehe
But how do you get to the *end* result?
Yeah, as I said, list full of Nones.
Oma Falk HonFu Done import itertools a=[0,1,2,3] b=[4,5,6] print([k for k in [j for i in (itertools.zip_longest(a,b)) for j in i] if k is not None ]) Output : [0, 4, 1, 5, 2, 6, 3]
𝐊𝐢𝐢𝐛𝐨 𝐆𝐡𝐚𝐲𝐚𝐥, I mean, your version creates a list that has Nones in them, but then we make another list where we take the Nones out.
a = [0,1,2,3] b = [4,5,6] c = a + b c[1:len(b)*2:2] = b c[:len(b)*2+1:2] = a[:len(b)+1] print(c) # Put bigger list in "a" and smaller list in"b"
Speed comparison between different known methods mentioned in this thread: https://code.sololearn.com/c39kIttuOIgd/?ref=app
not very elegant, but there's this... print(sum(list(zip(a+b,b+a)), ())[0:len(a+b)])
𝐊𝐢𝐢𝐛𝐨 𝐆𝐡𝐚𝐲𝐚𝐥 I remember a long zip in itertools🤔🤔 cant remember but that woukd make your zip variant perfect
Learn Playing. Play Learning
Send us a message