2016-11-17 15 views
1

私は、株価指数とセクターのリストをetfStocksというリストにロードするプログラムを持っています。次のようになります。外部ループの最初の反復後にネストforループが実行されていません

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

次に、セクタリストと呼ばれるリストに各セクタがロードされている別のリストがあります。これは、次のようになります。

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

私はsectorListリストを反復処理し、私は、その後の分析を行い、独自のリストの中に所定のセクターのためのティッカーのそれぞれをロードしようとしています。以下のスクリプトは最初のパスでは完全に動作しますが、ループが2番目のセクタに入ると、セクタ在庫リストは再構築されません。私は、以下のコードとループの入れ子を切り替えることを試みましたが、何も動作していないようです。

ネストされたループを再実行しない理由を知っている人はいますか?

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 =を[==部門場合etfStocksで、bについて]' ここでetf株をループしているので、両方のタプルパーツへの参照が必要です。 – Fallenreaper

+1

それは動作しているようです:https://repl.it/E10r/0 – depperm

+1

@Fallenreaperそのコードでは問題はありません。それらのコードはiを全体のタプルにし、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のiのために]' – JDGD

関連する問題