I need help creating a new list z, where I will have list values as y0, x0, y1, x1, y2, x2, y3 in vertical order as an array.
output: z = [1, 1, 1, 0, 0, 2, 2, 2, 2, 4, 4, 3, 3, 3, 8, 8, 4, 4, 4]
I tried this for loop iteration, but instead of the desired list z, I get only list values as y2, x2.
I really appreciate any help you can provide.
x = [[0, 0], [4, 4], [8, 8]]
y = [[1, 1, 1], [2, 2, 2], [3, 3, 3 ], [4, 4, 4]
for i in range (0, 3):
z = [*y[i], *x[i]]
CodePudding user response:
Solution without for loop:
>>> from itertools import chain, zip_longest
>>> list(chain.from_iterable(map(chain.from_iterable, zip_longest(y, x, fillvalue=()))))
[1, 1, 1, 0, 0, 2, 2, 2, 4, 4, 3, 3, 3, 8, 8, 4, 4, 4]
CodePudding user response:
You can use zip
and list comprehension
.
x = [[0, 0], [4, 4], [8, 8]]
y = [[1, 1, 1], [2, 2, 2], [3, 3, 3 ]]
res = [[*j, *i] for i,j in zip(x,y)]
print(res)
[[1, 1, 1, 0, 0], [2, 2, 2, 4, 4], [3, 3, 3, 8, 8]]
CodePudding user response:
I found the solution as:
from heapq import merge
from itertools import count
x = [[1, 1, 1], [2, 2, 2], [3, 3, 3 ], [4, 4, 4]]
y = [[0, 0], [4, 4], [8, 8]]
counter = count()
z = np.hstack(list(merge(x, y, key=lambda x: next(counter))))