How to combine each item from two lists in Python?

I have a huge group of lists in lists that I want to combine: it looks something like this:

[[1,2,3,4,5], [6,7,8,9,0], [2,5,7,9,4], [4,7,8,43,6]...] 

up to about 20 of these lists are listed. Now I want to combine the first list and the second list to look like this:

 [[1,6], [2,7], [3,8], [4,9], [5,0]] 

And then I want to do it again from the 1st and 3rd, until the end. Then do it again, starting from the second list to the third, fourth ... last line (but not the first, because it has already been done from the 1st to 2nd list). How can I write code that will do this?

Here is what I still have:

xcols = column with all lists as shown above

 def MakeLists(xcols): multilist = [] for i in xcols: for j in xcols[index(i):]: currentlist = map(list.__add__, i, j) multilist.append(currentlist) 

It gives me an error when I run it, possibly on a part of the map, because I don’t know how to convert each item to a list first and then display them. Any help would be great. Thanks!

+4
source share
5 answers

How about something like this:

 >>> import itertools >>> foo = [[1, 2, 3], [4, 5, 6], [7, 8, 8]] >>> for p in itertools.permutations(foo, 2): ... print zip(*p) ... [(1, 4), (2, 5), (3, 6)] [(1, 7), (2, 8), (3, 8)] [(4, 1), (5, 2), (6, 3)] [(4, 7), (5, 8), (6, 8)] [(7, 1), (8, 2), (8, 3)] [(7, 4), (8, 5), (8, 6)] 

Edit: In case you want to just archive the list with those after it, as people explain in the comments:

 >>> import itertools >>> for p in itertools.combinations(foo, 2): ... print zip(*p) ... [(1, 4), (2, 5), (3, 6)] [(1, 7), (2, 8), (3, 8)] [(4, 7), (5, 8), (6, 8)] 
+4
source
 a=[[1,2,3,4,5],[6,7,8,9,0],[2,5,7,9,4],[4,7,8,43,6]] i=0 for l in a[i:]: for inner in a[i+1:]: print [list(b) for b in zip(l, inner)] i += 1 

prints

 [[1, 6], [2, 7], [3, 8], [4, 9], [5, 0]] [[1, 2], [2, 5], [3, 7], [4, 9], [5, 4]] [[1, 4], [2, 7], [3, 8], [4, 43], [5, 6]] [[6, 2], [7, 5], [8, 7], [9, 9], [0, 4]] [[6, 4], [7, 7], [8, 8], [9, 43], [0, 6]] [[2, 4], [5, 7], [7, 8], [9, 43], [4, 6]] 
+2
source
 def foo(li): for element in li[1:]: for pair in zip(li[0], element): yield pair >>> from test import foo >>> bar = [[1, 2, 3, 5, 6], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]] >>> foo(bar) <generator object foo at 0x10592df50> >>> [e for e in foo(bar)] [(1, 6), (2, 7), (3, 8), (5, 9), (6, 10), (1, 11), (2, 12), (3, 13), (5, 14), (6, 15)] 
+1
source

You can fulfill your intended result if you have an even number of lists. This code will give the expected result. However, there may be something more "pythonic."

 foo = [[1,2,3,4,5],[6,7,8,9,0],[2,5,7,9,4],[4,7,8,43,6]] newlist = [] for i in xrange(len(foo)): if i % 2 == 0: list1 = foo[i] list2 = foo[i + 1] for n in xrange(len(list1)): newlist.append([list1[n],list2[n]]) print newlist 

Result:

 [[1, 6], [2, 7], [3, 8], [4, 9], [5, 0], [2, 4], [5, 7], [7, 8], [9, 43], [4, 6]] 
+1
source

The shortest solution ( lsts is the list of lists you have):

 [zip(lsts[i],lsts[j]) for i in xrange(len(lsts)) for j in xrange(i,len(lsts)) if i!=j] 

He will do what you said. Try it.

Is this what you expected?

+1
source

Source: https://habr.com/ru/post/1384527/


All Articles