2016-11-17 71 views
1

我有一個程序,將股票代碼和行業列表加載到名爲etfStocks的列表中。它看起來像下面這樣:Nest for loop在外部循環的第一次迭代後沒有運行

etfStocks = [('AAPL', 'Technology'), ('FB', 'Technology'), ('SPG', 'Real Estate'), ...] 

然後我有另一個列表,其中每個扇區都加載到名爲sectorList的列表中。它看起來像如下:

sectorList = ('Technology', 'Real Estate', 'Industrials', ...) 

我試圖遍歷sectorList列表和裝載每個代號爲給定扇區到自己的名單,然後我上進行分析。下面的腳本完美適用於第一遍,但是當循環進入第二個扇區時,它不會重建sectorStock列表。我試過在下面的代碼之間切換,併爲循環嵌套,但似乎沒有任何工作。

有沒有人有任何想法爲什麼它不會重新嵌套循環?

sectorStocks = [] 

for sector in sectorList: 
    sectorStocks.clear() 
    sectorStocks = [i[0] for i in etfStocks if i[1] == sector] 

    print("Computing statistics for: %s" % sector) 
+1

你迭代元組....你可能想要做這樣的事情: 'sectorStocks = [一爲A,B在etfStocks如果一個==部門]' 既然你在這裏循環了ETF股票,你需要參考兩個元組部分 – Fallenreaper

+1

它看起來像是在工作:https://repl.it/E10r/0 – depperm

+1

@Fallenreaper這不是他們的代碼的問題;他們的代碼讓我成爲整個元組,並通過i [0]和i [1]訪問它的部分。元組解包不是必要的 –

回答

1

似乎在這裏工作。你可能想要groupBy

from itertools import groupby 
from operator import itemgetter 

etfStocks = [('AAPL', 'Technology'), ('FB', 'Technology'), ('SPG', 'Real Estate')] 

sectorList = ('Technology', 'Real Estate', 'Industrials') 

stocks_by_sector = {k:list(v) for k,v in groupby(etfStocks, itemgetter(1))} 

for sector, stocks in stocks_by_sector.items(): 
    print(sector, stocks) 

https://repl.it/E10r/1

+0

謝謝 - 錯誤來自我的etfStocks列表在第一次傳遞後被清空。我添加了以下內容,現在它可以工作:'etfStocks = grabTickers(marketIndex)etfStocks = [我在etfStocks中爲我]' – JDGD

相關問題