2013-07-09 42 views
-3

我有一個列表,它是從itertools產品追加其他一些結果的結果列表。我想要的是能夠使用for循環訪問列表列表中的列表中的每個元素,但我無法訪問所有元素。我只能訪問最後一個列表的元素。結果是一個非常大的列表,如:[[1,2,],[4,3,6,19] [2,0,34,9,9] ......... [n ]。我希望能夠訪問for循環中列表中每個列表中的所有元素,但只能獲取最後一個列表中的元素。 Itertools僅顯示內存中元素的位置。在for循環中訪問itertools產品的元素

myListofLists=[]        
from itertools import product 
animal = ['dog','cat'] 
number = [5,45,8,9] 
color = ['yellow','blue','black'] 
myProduct = product(animal, number, color): 
myListOfLists.append(myProduct) 
for item in myListOfList: 
    list(items) 

這使得結果是這樣的:[[ '狗',5, '黃'] [ '狗',45, '藍'],......] 這是隻顯示在shell中,但我試圖將結果寫入文件,我只能看到最後一個列表的元素。 (1)如何訪問鏈表中每個列表的所有元素,以及(2)除了向我顯示元素的位置外,我怎樣才能在python shell中查看結果記憶。謝謝!

+9

這篇文章是不連貫的。 –

+2

我們可以請一些示例代碼嗎?一個示例輸入?預期的產出?實際產出?請編輯你的問題。 – That1Guy

+0

@ That1Guy。我現在更清楚了一點。謝謝 – user2553377

回答

1

讀您的文章很多次,我認爲你有興趣在此語法:

for animal, number, color in ...: 

它允許您訪問從內部列表中的元素。

import itertools 
animals = ['dog', 'cat'] 
numbers = [5, 45, 8, 9] 
colors = ['yellow', 'blue', 'black'] 
for animal, number, color in itertools.product(animals, numbers, colors): 
    print "Animal is {0}, number is {1}, and color is {2}".format(animal, number, color) 

查看運行上ideone

編輯:閱讀您的意見在其他線程,我猜你感興趣的迭代內的元組(?)。您不必將它們轉換爲列表,您可以簡單地遍歷它們。在ideone

EDIT 2

import itertools 
animals = ['dog', 'cat'] 
numbers = [5, 45, 8, 9] 
colors = ['yellow', 'blue', 'black'] 
for triplet in itertools.product(animals, numbers, colors): 
    for element in triplet: 
     print element 

演示:您可以嘗試爲自己的分數件事的做法。

import itertools 
animals = ['dog', 'cat'] 
numbers = [5, 45, 8, 9] 
colors = ['yellow', 'blue', 'black'] 
general_list = ['horse', 'blue', 'dog', 45] 

def give_score(element): 
    return 1 if element in general_list else 0 

for triplet in itertools.product(animals, numbers, colors): 
    print sum([give_score(element) for element in triplet]) 

演示here

+0

讓我們假設產品的結果已經得到:All = [[dog,5,yellow],[dog,5,blue],[dog,5,black],[dog,45,yellow] .. .... []]。我如何去訪問它。謝謝 – user2553377

+0

@傑拉德。它是工作,但它的工作,但我的意思是分別爲產品的每個列表:動物是狗,數量是5,並且顏色是黃色的 動物是狗,數字是5,並且顏色是藍色的 動物是狗,數字是5,並且第一次迭代時顏色爲黑色 – user2553377

+0

@ user2553377仍然不完全確定問題出在哪裏。第二種方案是否更適合您的需求? –

4

itertools.product本身返回一個對象,你可以遍歷。例如:

>>> from itertools import product 
>>> animal = ['dog','cat'] 
>>> number = [5,45,8,9] 
>>> color = ['yellow','blue','black'] 
>>> myProduct = product(animal, number, color) 
>>> for p in myProduct: 
...  print p 
...  
('dog', 5, 'yellow') 
('dog', 5, 'blue') 
('dog', 5, 'black') 
[...] 
('cat', 9, 'blue') 
('cat', 9, 'black') 

在此之後,myProduct耗盡(出元素的產生),所以如果你再次循環,你不會得到任何東西:

>>> for p in myProduct: 
...  print p 
...  
>>> 

如果你想兌現myProduct成列表,你可以這樣做:

>>> myProduct = list(product(animal, number, color)) 
>>> len(myProduct) 
24 
>>> myProduct[7] 
('dog', 8, 'blue') 

通過追加product對象本身的列表,你沒有得到的列表迭代它會p結果,只有對象。

>>> myProduct = product(animal, number, color) 
>>> myProduct 
<itertools.product object at 0x8e3ce3c> 

如果你願意,你可以在一些地方保存該對象,並從中獲取內容的相同方法:

>>> some_list = [myProduct, myProduct] 
>>> next(some_list[0]) 
('dog', 5, 'yellow') 
>>> next(some_list[1]) 
('dog', 5, 'blue') 
>>> next(some_list[1]) 
('dog', 5, 'black') 
>>> next(some_list[0]) 
('dog', 45, 'yellow') 

但在這裏,我不認爲這是你在找什麼。

+0

如何迭代訪問列表中的每個元素。例如['dog',8,'blue')],然後移到下一個列表,直到所有內容都用盡。我認爲如果你對如何將所有元組轉換爲列表中的列表有所瞭解,從而使它成爲列表列表,然後依次訪問每個列表的元素,myListOfList = [[ 'dog',8,'blue'] ['dog',5,'black'........ [....]],然後使用for循環訪問元素:for myListofList – user2553377

+0

如上所述,簡單地說'listOfList = list(product(animal,number,color))'產生一個元組列表。 – DSM

+0

如何迭代訪問列表中的每個元素。例如['dog',8,'blue')],然後移到下一個列表,直到所有內容都用盡。我認爲如果你對如何將所有元組轉換爲列表中的列表有所瞭解,從而使它成爲列表列表,然後依次訪問每個列表的元素,myListOfList = [[ '狗',8,'藍'] ['狗',5,'黑'........ [...]],然後使用for循環訪問元素,如:for myListOfList中的項目: for elem項目: – user2553377