Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to iterate through lists vertically?

I have multiple lists to work with. What I'm trying to do is to take a certain index for every list(in this case index 1,2,and 3), in a vertical column. And add those vertical numbers to an empty list.

line1=[1,2,3,4,5,5,6]
line2=[3,5,7,8,9,6,4]
line3=[5,6,3,7,8,3,7]

vlist1=[]
vlist2=[]
vlist3=[]

expected output

Vlist1=[1,3,5] 
Vlist2=[2,5,6]
Vlist3=[3,7,3]
like image 666
user2864064 Avatar asked Sep 14 '25 16:09

user2864064


2 Answers

Having variables with numbers in them is often a design mistake. Instead, you should probably have a nested data structure. If you do that with your line1, line2 and line3 lists, you'd get a nested list:

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

You can then "transpose" this list of lists with zip:

vlist = list(zip(*lines)) # note the list call is not needed in Python 2

Now you can access the inner lists (which in are actually tuples this now) by indexing or slicing into the transposed list.

first_three_vlists = vlist[:3]
like image 86
Blckknght Avatar answered Sep 16 '25 07:09

Blckknght


in python 3 zip returns a generator object, you need to treat it like one:

from itertools import islice

vlist1,vlist2,vlist3 = islice(zip(line1,line2,line3),3)

But really you should keep your data out of your variable names. Use a list-of-lists data structure, and if you need to transpose it just do:

list(zip(*nested_list))
Out[13]: [(1, 3, 5), (2, 5, 6), (3, 7, 3), (4, 8, 7), (5, 9, 8), (5, 6, 3), (6, 4, 7)]
like image 41
roippi Avatar answered Sep 16 '25 06:09

roippi