0

これは一部の人にとっては些細なことかもしれませんが、Pythonで2D配列(?)を調べるのに問題があります。

orderList = [ ('apples', 2.0), ('pears', 3.0), ('limes', 4.0) ]

このリストをループするにはどうすればよいですか?私はこれを試しましたが、明らかに機能していません。

for item in orderList:
        print item;

**この情報が掲載されているチュートリアルまたはWebサイトに案内していただければ、満足いたします。

4

3 に答える 3

11

タプルアンパックを使用して、すべてをループできます。

for fruit, quantity in orderList:
    print 'I have', quantity, fruit + 'es'

forループの内側からこれを行うこともできます。

for fruit_info in orderList:
    fruit, quantity = fruit_info

    print 'I have', quantity, fruit + 'es'
于 2013-01-13T01:49:44.940 に答える
0

コードは問題なく機能します

orderList = [ ('apples', 2.0), ('pears', 3.0), ('limes', 4.0) ]
for item in orderList:
    print item;           #you don't need `;` but it is not a problem to leave it
>>>
('apples', 2.0)
('pears', 3.0)
('limes', 4.0)
于 2013-01-13T02:04:33.063 に答える
0

リストを反復処理する方法はいくつかあります。

最も一般的なのは各ループです

for fruit in orderList:
    print fruit

より効率的なバリエーションは、ジェネレーターを使用することです。ジェネレーターは反復可能なシーケンスであることにも注意してください。

def generator(fruits):
    for fruit in fruits:
        yield fruit

generate = generator(orderList)
firstFruit = generate.next()
// Doing complex calculations before continuing the iteration
answer = 21 + 21
secondFruit = generate.next()

より洗練されたアプローチは、高階関数'map'を使用することです。マップは値を返すこともできます。各果物の価格または数量を5%増やしたい場合は、単純な関数を作成する必要があります。

def display(fruit):
    print fruit  // map takes in a function as an argument and applies it to each element of the sequence.

map( display, orderList )

// You could also use a generator
map( display, generate )

私が考えることができる最後の方法は、圧縮を使用することです。圧縮は組み込み形式の反復であり、現在ほとんどの標準ライブラリデータ構造で使用できます。シーケンスを使用して新しいリストを作成する場合に便利です。私は怠け者なので、構文を非難するためにdisplayを再利用しています。

[ display(fruit) for fruit in orderList ]
[ display(fruit) for fruit in generate ]
于 2013-01-13T08:56:52.467 に答える