This question already has answers here:
Transpose list of lists
(14 answers)
Closed 1 year ago.
I have 3 lists examples below, I want to match each one and create new lists
l1 = [a,b,c]
l2= [1,2,3]
l3=[7,8,9]
How do I create 3 new lists with expected output:
l1 = [a,1,7]
l2= [b,2,8]
l3=[c,3,9]
Thanks!
Use zip or a comprehension:
# Create a list of lists
ls = [l1, l2, l3]
ls = list(zip(*ls)) # output: a list of tuples
# OR
ls = [l for l in zip(*ls)] # output: a list of lists
Output:
>>> ls[0]
['a', 1, 7]
>>> ls[1]
['b', 2, 8]
>>> ls[2]
['c', 3, 9]
Related
This question already has answers here:
Why do these list operations (methods: clear / extend / reverse / append / sort / remove) return None, rather than the resulting list?
(6 answers)
How do I iterate through two lists in parallel?
(8 answers)
How do I concatenate two lists in Python?
(31 answers)
Closed 6 months ago.
I'm trying to extend two lists of lists in python, so that item 1 of the first list of lists extends with item 1 of the second list of lists, and so forth.
I'm new to this and self-taught, so could be missing something very simple, but I can't find an answer anywhere.
This is what I feel the code should be, but obviously not working.
list1[x].extend(list2[x]) for x in list1
What I'm trying to achieve is this:
list1 = [[1,2,3],[4,5,6],[7,8,9]]
list2 = [[a,b,c],[d,e,f],[g,h,i]]
output = [[1,2,3,a,b,c],[4,5,6,d,e,f],[7,8,9,g,h,i]]
Any ideas?
You can use zip:
list1 = [[1,2,3],[4,5,6],[7,8,9]]
list2 = [['a','b','c'], ['d','e','f'], ['g','h','i']]
output = [sub1 + sub2 for sub1, sub2 in zip(list1, list2)]
print(output)
# [[1, 2, 3, 'a', 'b', 'c'], [4, 5, 6, 'd', 'e', 'f'], [7, 8, 9, 'g', 'h', 'i']]
Use zip() to loop over the two lists in parallel. Then use extend() to append the sublist from list2 to the corresponding sublist in list1.
for l1, l2 in zip(list1, list2):
l1.extend(l2)
print(list1)
list1[x].extend(list2[x]) does achieve the result you want for one pair of lists, if list1[x] is [1, 2, 3] and list2[x] is [a, b, c], for example.
That means x has to be an index:
x = 0
list1[x].extend(list2[x])
# now the first list in `list1` looks like your desired output
To do that for every pair of lists, loop over all possible indexes x – range(upper) is the range of integers from 0 (inclusive) to upper (exclusive):
for x in range(len(list1)):
list1[x].extend(list2[x])
# now `list1` contains your output
To produce a new list of lists instead of altering the lists in list1, you can concatenate lists with the + operator instead:
>>> [1, 2, 3] + ['a', 'b', 'c']
[1, 2, 3, 'a', 'b', 'c']
output = []
for x in range(len(list1)):
output.append(list1[x] + list2[x])
And finally, the idiomatic Python for this that you’ll get around to someday is:
output = [x1 + x2 for x1, x2 in zip(list1, list2)]
I have simply used list comprehension with list addition, while zipping the correlated lists together
list1 = [[1,2,3],[4,5,6],[7,8,9]]
list2 = [['a','b','c'], ['d','e','f'], ['g','h','i']]
list3 = [l1+l2 for l1, l2 in zip(list1, list2)]
print(list3)
[[1, 2, 3, 'a', 'b', 'c'], [4, 5, 6, 'd', 'e', 'f'], [7, 8, 9, 'g', 'h', 'i']]
This question already has answers here:
Flatten an irregular (arbitrarily nested) list of lists
(51 answers)
Closed 5 years ago.
Say I have a list of lists
L3 = [3, 4, 5]
L2 = [2, L3, 6]
L1 = [1, L2, 7]
Whats the best "Python"-ish way to print L1 without its inner lists showing as lists? (or how to copy all values to a new list of integers)
here a function convert a nesting list to flat list
L3 = [3, 4, 5]
L2 = [2, L3, 6]
L1 = [1, L2, 7]
def flat_list(l):
result = []
for item in l:
if isinstance(item,list):
result.extend(flat_list(item))
else:
result.append(item)
return result
print flat_list(L1)
#print [1, 2, 3, 4, 5, 6, 7]
This question already has answers here:
How to zip two lists of lists in Python?
(5 answers)
Closed 7 years ago.
I've 2 lists of list, for example:
a = [['a','b','c'],[1,2,3]]
b = [['d','e','f'],[4,5,6]]
What I need is:
c = [['a','b','c','d','e','f'],[1,2,3,4,5,6]]
I can't figure out how to do this, any help is welcome.
Thank you a lot,
Regards
You can use zip for that:
list1 = [['a','b','c'],[1,2,3]]
list2 = [['d','e','f'],[4,5,6]]
list3 = [a + b for a, b in zip(list1, list2)]
Output of list3 would be:
[['a', 'b', 'c', 'd', 'e', 'f'], [1, 2, 3, 4, 5, 6]]
Try something like this:
map(lambda x,y:x+y,a,b)
EDIT:
This version should work for lists with different number of elements:
map(lambda x,y:(x or []) + (y or []),a,b)
a = [['a','b','c'], [1,2,3]]
b = [['d','e','f'], [4,5,6]]
S=[i+j for i,j in zip(a,b)]
This question already has answers here:
Combining 2 lists in python
(2 answers)
Closed 8 years ago.
If I have 2 lists:
list1 = ["X","Y","Z"]
list2 = [1,2,3]
How can I combine them to make a another list:
list3 = [[1,"X"],[2,"Y"],[3,"Z"]]
Thanks in advance!
Just use zip to get tuples of values at corresponding indices in the two lists, and then cast each tuple to a list. So:
[list(t) for t in zip(list1, list2)]
is all you need to do.
Demo:
>>> list1 = ["X", "Y", "Z"]
>>> list2 = [1, 2, 3]
>>> list3 = [list(t) for t in zip(list1, list2)]
>>> list3
[[1, 'X'], [2, 'Y'], [3, 'Z']]
This question already has answers here:
How do I make a flat list out of a list of lists?
(34 answers)
Closed 9 years ago.
This is python syntax related question... Is there more elegant and more pythonic way of doing this:
>>> test = [[1,2], [3,4,5], [1,2,3,4,5,6]]
>>> result = []
>>> for i in test: result += i
>>> result
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6]
Join multiple list (stored inside another list) to one long list?
Use the itertools.chain.from_iterable() classmethod:
from itertools import chain
result = list(chain.from_iterable(test))
If all you need to do is iterate over the chained lists, then don't materialize it to a list(), just loop:
for elem in chain.from_iterable(test):
print(elem, end=' ') # prints 1 2 3 4 5 1 2 3 4 5 6
You can also use parameter unpacking, directly on itertools.chain:
for elem in chain(*test):
But do this only with a smaller list.