2015-06-30 30 views
2

具有以下兩個列表的列表:迭代並打印在錯誤的道路

sist = ["item1", "item2", "item3"] 
numbers = [2,1,4] 

我想打印的sistnumbers同一指數的次數的元素。

這意味着,在本例中張貼了我所需的輸出是:

item1 
item1 
item2 
item3 
item3 
item3 
item3 

這是我一直沒有成功嘗試:

for idx in xrange(len(sist)): 
    for num in numbers: 
     i = 0 
     print num 
     while i < num: 
      print sist[idx] 
      i = i + 1 

我想我錯了迭代我得到這個輸出的方式:

2 
item1 
item1 
1 
item1 
4 
item1 
item1 
item1 
item1 
2 
item2 
item2 
1 
item2 
4 
item2 
item2 
item2 
item2 
2 
item3 
item3 
1 
item3 
4 
item3 
item3 
item3 
item3 

有人可以告訴我我做錯了什麼和如何fi x它?

回答

4
sist = ["item1", "item2", "item3"] 
numbers = [2,1,4] 

for i in range(len(numbers)): 
    for j in numbers[i]: 
     print(sist[i]) 
    print('') 

我認爲這是你正在尋找所需的輸出。它遍歷數組數組,並使用每個元素作爲第二個循環的範圍。因爲數字和SIST是相同的長度,你可以只使用isist

5

如果你想使用嵌套for循環這樣,你可以做

for item, rep in zip(sist, numbers): 
    for _ in range(rep): 
     print(item) 

輸出

item1 
item1 
item2 
item3 
item3 
item3 
item3 
2

這需要一個嵌套循環,如下所示:

>>> sist = ["item1", "item2", "item3"] 
>>> numbers = [2,1,4] 
>>> for i in xrange(len(numbers)): 
    for j in xrange(numbers[i]): 
     print sist[i] 


item1 
item1 
item2 
item3 
item3 
item3 
item3 
5

您可以使用zip函數在其相應的索引處連接兩個列表,然後打印f開始步驟元件(從SIST)的倍作爲第二元件的數目(從數字)

sist = ["item1", "item2", "item3"] 
numbers = [2,1,4] 
for x, y in zip(sist, numbers): 
    for _ in range(y): 
     print(x) 

輸出是 -

item1 
item1 
item2 
item3 
item3 
item3 
item3 
3

爲了補充其他的答案,則可以避免像這樣嵌套循環:

from __future__ import print_function # This isn't needed in Python 3. 

for n, item in zip(numbers, sist): 
    print([item] * n, sep='\n') 
-3

的索引,但它必須被寫入...

s = ["item1", "item2", "item3"] 
n = [2, 1, 4] 

[print('\n'.join([x] * y)) for x, y in zip(s, n)]