2016-11-18 11 views

答えて

3

3つの可能なアプローチ:

  1. 読み取り可能

    new_list = [] 
    for a in list1: 
        for b in list2: 
         new_list.append(a * b) 
    

    これは何が起こっているのか、それは非常に明確になりますが、new_list.append()に4行と繰り返し呼び出しを必要とし、わずかです非効率的な。

  2. 簡潔

    new_list = [a * b for a in list1 for b in list2] 
    

    これは非常にコンパクトですが、多くの人にとってはマルチプルforlist comprehensionsのネスティングが左から右または右に行くかどうかを覚えておくの瞬間または2を取ります-左。

  3. レイジー

    from itertools import product 
    
    new_list = [a * b for a, b in product(list1, list2)] 
    

    これはlist1list2generatorsまたは他のワンショット、いい加減に評価さイテラブル、例えばある場合でも正常に動作します

    >>> from itertools import count, islice 
    >>> list1 = islice(count(1), 3) 
    >>> list2 = islice(count(4), 3) 
    >>> [a * b for a, b in product(list1, list2)] 
    [4, 5, 6, 8, 10, 12, 12, 15, 18] 
    

    ...最初の2つのアプローチでは機能しません。 Pythonでの変数に名前を付けるための従来の方法で、私はこれらの例にnew_listではなくNewListを使用しました

注意、。

+1

バイトコードの実行を避けるために、CPythonのすべての作業をC層にプッシュするだけです。 starmap'、 '演算子import mul'、' new_list = list(starmap(mul、product(list1、list2))) 'のように、ローカルのテストケースでは(小さなint値を持つ2つの10要素の入力があります)、そのようなCレイヤーに作業をプッシュすると、ランタイムが〜1/6(これは50x50の場合にとどまりました。小さな入力が、それだけです)。一般的な警告が適用されます:これは時期尚早の最適化であり、リストの理解はPythonicです。 – ShadowRanger

0

あなたはこのケースでは、あなたが上記の持っていた何を与えることができNewListを、印刷して結果を確認することができます。 list1list2は、上記と同様にこのコードの上に初期化されています。

NewList = [] 
for item1 in list1: 
    for item2 in list2: 
     NewList.append(item1*item2) 
関連する問題