2016-09-21 117 views
-2

我必須使用兩個不同的列表創建三個新的項目列表。Python中的循環「for」

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

所以,len(list_one) != len(list_two)

現在我應該創建一個算法(一個週期),它可以這樣做: [oneblue, twoblue, threeblue, fourblue, fiveblue]。 「綠色」和「白色」也一樣。

我不敢肯定我應該創造三個週期,但我不知道如何。 我試圖做出這樣的功能,但它不起作用。

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():應該像def mix(l_one,l_two):

以上所有在下面的代碼:

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(l_one,l_two): 
      new_list =[x+y for x in l_one for y in l_two] 
      return new_list 
+0

很好的答案,但結果應該是['oneblue ','雙線','三線',...,'五個白色'] – 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 = i + 1),因爲Python知道i將採用for循環定義中指定的所有值。

  2. 如果您的代碼縮進(縮進在Python中非常重要)確實是上面所寫的代碼縮寫,那麼您的return語句位於for循環內。只要你的函數遇到你的return語句,你的函數將退出並返回你指定的內容:在這種情況下,一個字符串。

  3. new_list不是一個列表,而是一個字符串。

  4. 在Python中,你可以循環直接通過,而不是它們的索引(for item in list_one:而不是for i in range(len(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]