Reputation: 3200
Suppose I have 3 lists such as these
l1 = [1,2,3]
l2 = [4,5,6]
l3 = [7,8,9]
how do I get to print out everything from these lists at the same time ? What's the pythonic way to do something like that ?
for f in l1,l2 and l3:
print f
This only seems to be taking 2 lists into account.
Desired output: for each element in all the lists, I'm printing them out using a different function
def print_row(filename, status, Binary_Type):
print " %-45s %-15s %25s " % (filename, status, Binary_Type)
and I Call the above function inside the for loop.
Upvotes: 11
Views: 49250
Reputation: 1
I prefer to use three for loops with if condition.
l1 = [1,2,3]
l2 = [4,5,6]
l3 = [7,8,9]
total = []
for x in range(len(l1)):
for y in range(len(l2)):
for z in range(len(l3)):
if x == y and x == z:
total.append(str(l1[x]) + " " + str(l2[y]) + " " + str(l3[z]))
print(total)
for i in range(len(total)):
print(total[i])
Upvotes: 0
Reputation: 616
If you mean that you have 3 lists of equal length and you want to print out their contents as 3 columns, then how about zip() to connect the columns and a list comprehension to print() on each iteration:
[ print(row) for row in zip(l1, l2, l3) ]
The above will print repr's of tuple(s). If you want to format the values otherwise:
[ print("{} / {} / {}".format(*row)) for row in zip(l1, l2, l3) ]
Nobody said you have to use the output of a list comprehension.
Upvotes: 0
Reputation: 1179
To expand on top of Abhijit answer, you could use the itertools generator as the iterable within a list comprehension.
>>> [ n for n in itertools.chain(l1, l2, l3) ]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Upvotes: 1
Reputation: 310069
I think you might want zip
:
for x,y,z in zip(l1,l2,l3):
print x,y,z #1 4 7
#2 5 8
#3 6 9
What you're doing:
for f in l1,l2 and l3:
is a little strange. It is basically equivalent to for f in (l1,l3):
since l2 and l3
returns l3
(assuming that l2
and l3
are both non-empty -- Otherwise, it will return the empty one.)
If you just want to print each list consecutively, you can do:
for lst in (l1,l2,l3): #parenthesis unnecessary, but I like them...
print lst #[ 1, 2, 3 ]
#[ 4, 5, 6 ]
#[ 7, 8, 9 ]
Upvotes: 17
Reputation: 63757
It depends on what you want to achieve,
>>> #Given
>>> l1,l2,l3 = [1,2,3],[4,5,6],[7,8,9]
>>> #To print row wise
>>> import itertools
>>> for f in itertools.chain(l1,l2,l3):
print(f,end=" ")
1 2 3 4 5 6 7 8 9
>>> #To print column wise
>>> for f in itertools.izip(l1,l2,l3):
print(*f,end=" ")
1 4 7 2 5 8 3 6 9
>>>
or the following implementation which will work in Python 2.7
>>> for f in itertools.chain(*itertools.izip(l1,l2,l3)):
print f,
1 4 7 2 5 8 3 6 9
>>>
Upvotes: 2
Reputation: 5949
It you're lists are not all the same length it is often better to use map
:
>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]
>>> l3 = [7, 8, 9, 2]
>>> for x, y, z in map( None, l1, l2, l3):
... print x, y, z
...
1 4 7
2 5 8
3 6 9
None None 2
Upvotes: 1
Reputation: 114025
If you want to print
1 4 7
2 5 8
3 6 9
Do:
for i,j,k in zip(l1,l2,l3):
print i,j,k
Upvotes: 2
Reputation: 9721
No need to use zip
, just add them together using the +
operator. l1 + l2 + l3
creates a new list that is the combination of l1
, l2
and l3
so you can simply loop through that, like so:
for f in l1+l2+l3:
print(f)
Your use of the and
operator is incorrect. The other reason why your code doesn't work is using commas (like l1, l2, l3
) creates a tuple, which is a container that now holds your 3 lists. So when you try to loop through l1, l2, l3
it will loop through every element in that tuple (which are the lists) and not through every element in the lists as you intend.
Upvotes: 4