2016-09-21 15 views
-2

2つの異なるリストを使って3つの新しいアイテムリストを作成する必要があります。 [oneblue, twoblue, threeblue, fourblue, fiveblue]"for" for Python

list_one = ['one', 'two','three', 'four','five'] 
list_two = ['blue', 'green', 'white'] 

ので

len(list_one) != len(list_two)

は今、私はこれを行うことができアルゴリズム(サイクル)を作成する必要があります。 「緑」と「白」と同じです。

私は3サイクルを作成する必要がありますが、私はどのように知りません。 私はこのような機能を作ろうとしましたが、機能しません。

def mix(): 
    i = 0 
    for i in range(len(list_one)): 
     new_list = list_one[i]+list_two[0] 
     i = i+1 
     return new_list 

私は間違っていますか?

+1

- あなたがされた最初の横に任意の繰り返しを防ぐ、ループ内で戻ってきています?実行される。 - あなたは 'new_list'を返していますが、それを見ると単なる文字列であることがわかります。 - あなたは 'i'をインクリメントしています。これは範囲の役割です。 - あなたは3サイクルが必要だと思っていますが、どこにそのアイデアがあるのか​​分かりません。 – njzk2

答えて

2

私はあなたがitertools.productを探しているかもしれないと思う:

>>> [b + a for a,b in itertools.product(list_two, list_one)] 
['oneblue', 
'twoblue', 
'threeblue', 
'fourblue', 
'fiveblue', 
'onegreen', 
'twogreen', 
'threegreen', 
'fourgreen', 
'fivegreen', 
'onewhite', 
'twowhite', 
'threewhite', 
'fourwhite', 
'fivewhite'] 
+0

なぜ逆転ですか? ): '[a + b for a、b itertools.product(list_one、list_two)]' – zvone

+0

OPはリスト2を "外側"ループにしたいので... – wim

0
  • リターンは、forループの外にする必要があります。
  • 範囲を使用しているため、iを初期化してインクリメントする必要はありません。
  • また、両方のリストが可変長である可能性があるため、範囲を使用しないでください。リストの要素を直接反復処理します。

    def mix(l_one,l_two): 
        new_list = [] 
        for x in l_one: 
         for y in l_two: 
          new_list.append(x+y) 
        return new_list 
    
    list_one = ['one', 'two','three', 'four','five'] 
    list_two = ['blue', 'green', 'white'] 
    n_list = mix(list_one,list_two) 
    print n_list 
    

    出力:リスト理解を使用して

    C:\Users\dinesh_pundkar\Desktop>python c.py 
    ['oneblue', 'onegreen', 'onewhite', 'twoblue', 'twogreen', 'twowhite', 'threeblu 
    e', 'threegreen', 'threewhite', 'fourblue', 'fourgreen', 'fourwhite', 'fiveblue' 
    , 'fivegreen', 'fivewhite'] 
    
    C:\Users\dinesh_pundkar\Desktop> 
    

    は、mix()関数は以下のようになります。

  • def mix():
  • は、以下のコードでは上記のすべての def mix(l_one,l_two):

ようにする必要があります

def mix(l_one,l_two): 
      new_list =[x+y for x in l_one for y in l_two] 
      return new_list 
+0

素晴らしい答えがありますが、['oneblue '、' twoblue '、' threeblue '、...、' fivewhite '] – coder

0

あなたは

def cycle(list_one,list_two): 
    newList = [] 
    for el1 in list_two: 
     for el2 in list_one: 
     newList.append(el2+el1) 
    return newList 
0

あなたのコードを持ついくつかの問題があり、これを行う必要があります。

  1. あなたがループfor i in ...:のために行うと、あなたはii = 0を初期化する必要はありませんに)、そして、iがforループ定義で指定されたすべての値をとることをPythonが知っているので、それをインクリメントしないでください(i = i + 1)。

  2. コードインデント(インデントがPythonでは非常に重要です)が真に上記のものである場合、returnステートメントはforループの内側にあります。関数がreturnステートメントを検出すると、関数は終了し、指定したものを返します。この場合は文字列です。

  3. new_listはリストではなく文字列です。Pythonで

  4. 、あなたはあなたのコードはここfor i in range(len(list_one)):

とは対照的に、そのインデックス(for item in list_one:とは対照的に、リストアイテムの上に直接ループクリーンアップされることができます。

def mix(): 
    new_list = [] 
    for i in list_one: 
     new_list.append(list_one[i]+list_two[0]) 
    return new_list 

この缶リストの理解を使用して書き直す:

def mix(list_one, list_two): 
    return [item+list_two[0] for item in list_one] 

そしてlist_two複数のアイテムを持っている、あなたが同様にlist_twoを反復処理する必要がありますので:私は間違って何をしています* *

def mix(list_one, list_two): 
    return [item+item2 for item in list_one for item2 in list_two]