10

これらのような3つのリストがあるとします

l1 = [1,2,3]
l2 = [4,5,6]
l3 = [7,8,9]

これらのリストからすべてを同時に印刷するにはどうすればよいですか? そのようなことをするためのpythonicの方法は何ですか?

for f in l1,l2 and l3:
    print f 

これは2つのリストのみを考慮しているようです。

望ましい出力: すべてのリストの各要素について、別の関数を使用してそれらを出力しています

def print_row(filename, status, Binary_Type):
    print " %-45s %-15s %25s " % (filename, status, Binary_Type)

上記の関数を for ループ内で呼び出します。

4

7 に答える 7

15

私はあなたが望むかもしれないと思うzip

for x,y,z in zip(l1,l2,l3):
    print x,y,z  #1 4 7
                 #2 5 8
                 #3 6 9

あなたがしていること:

for f in l1,l2 and l3:

は少し奇妙です。for f in (l1,l3):基本的にはsinceと同等です(とが両方とも空でないことを前提とします -- そうでない場合は、空のものがl2 and l3返されます)。l3l2l3

各リストを連続して印刷したい場合は、次のようにします。

for lst in (l1,l2,l3):  #parenthesis unnecessary, but I like them...
    print lst   #[ 1, 2, 3 ]
                #[ 4, 5, 6 ]
                #[ 7, 8, 9 ]
于 2012-08-20T15:54:50.440 に答える
4

を使用する必要はありません。演算子zipを使用してそれらを加算するだけです。の組み合わせである新しいリストを作成するため、次のように単純にループできます。+l1 + l2 + l3l1l2l3

for f in l1+l2+l3:
    print(f)

演算子の使い方andが間違っています。コードが機能しないもう 1 つの理由は、コンマ ( などl1, l2, l3) を使用すると、3 つのリストを保持するコンテナーであるタプルが作成されることです。したがって、ループしようとするとl1, l2, l3、意図したとおりにリスト内のすべての要素ではなく、そのタプル (リスト) 内のすべての要素をループします。

于 2012-08-20T15:55:50.073 に答える
2

印刷したい場合

1 4 7
2 5 8
3 6 9

行う:

for i,j,k in zip(l1,l2,l3):
    print i,j,k
于 2012-08-20T15:56:00.947 に答える
2

何を達成したいかによりますが、

>>> #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 
>>> 

または、Python 2.7 で動作する次の実装

>>> for f in itertools.chain(*itertools.izip(l1,l2,l3)):
    print f,


1 4 7 2 5 8 3 6 9 
>>> 
于 2012-08-20T16:09:00.430 に答える
1

リストがすべて同じ長さではない場合は、多くの場合、使用する方が適切です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
于 2012-08-20T16:06:26.200 に答える
1

Abhijit の回答を拡張するには、itertools ジェネレーターをリスト内包表記内のイテラブルとして使用できます。

>>> [ n for n in itertools.chain(l1, l2, l3) ]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
于 2012-08-20T17:39:05.883 に答える