2015-05-14 43 views
1

下面的代碼是生產這個錯誤:的Python:插入陣列根據病情

Traceback (most recent call last): 
    File "pulllist2.py", line 28, in <module> 
    list_sym[w] = symbol 
IndexError: list assignment index out of range 

我想在這裏實現的是隻有一個元素添加到數組,如果word1word2是串中security_name。我不知道另一種方法來初始化數組。

#!/usr/bin/env python3 
import glob 
import os 
import sys 
import fnmatch 

list_sym = [] 
list_name = [] 
w = 0 
count = 0 
word1 = 'Stock' 
word2 = 'ETF' 

# for loop that parses lines into appropriate variables 
for file in glob.glob('./stocklist/*.txt'): 
with open(file) as input: 

    for line in input: 
     # split line into variables.. trash will have no use 
     symbol, security_name, trash = line.split('|', 2) 

     if word1 in security_name or word2 in security_name: 
      # stores values in array 
      list_sym.append(1) ## initialize arrays 
      list_name.append(1) 
      list_sym[w] = symbol 
      list_name[w] = security_name 
      count += 1 

     w += 1 
+0

爲什麼在使用字典時使用並行列表?你已經在開始時初始化了你的數組。同樣,你的for循環也不對。你不能訪問'文件對象'中的'行'。 – Zizouz212

+0

看着字典的權利,謝謝你的提示。 –

回答

2

你初始化你在這裏列出,雖然空單:

list_sym = [] 

這是好的,但是,當你添加到列表中會發生什麼?您可以簡單地使用append方法。

list_sym.append(whatever) 

它看起來像來自舊的語言(Java或C或C++)。一切都帶有大括號和固定數組長度以及無聊的東西。你不必索引你所做的一切。

append ing列表,只是簡單的添加到列表中。您可以添加任何內容到列表中。

list_sym.append(5345034750439) 
list_sym.append("Yo. What's up!") 

這對你更安全,因爲你可以添加,而不是嘗試獲得一個位置。追加是要走的路。

爲了找到長度:

>>> len(list_sym) 
10 # There's 10 objects in the list. 

讓我推薦你的字典,就像我說:

詞典讓你的對象配對在一起,只是像變量賦值。這很簡單:

my_dictionary = {} 

要添加一個對象,您需要您的密鑰和您的值。

my_dictionary["name"] = "Zinedine" 
       ^  ^
       Key   Value 

要訪問該值,您需要知道密鑰(您將如何獲得沒有金鑰匙的寶藏)。就像你試圖爲列表建立索引一樣,你通過相同的概念獲得價值。字典通常用於配對對象,或者在一個共同的範圍內存儲多個變量。希望對你有幫助! :)

+0

你是對的,我顯然來自舊的語言.. Python是驚人的:D感謝您的幫助,很好地解釋。 –

0

你不能在python中做到這一點。 嘗試,而不是

list_sym.append(symbol) 
list_name.append(security_name) 
+0

到目前爲止,這是我想要它做的。那麼我怎麼看到那個'list_sym'中的元素的數量呢?或者它的長度。 –

+0

要找到長度,你可以這樣做:'len(list_sym)'。我現在也在我的回答中強調了這一點。 :) – Zizouz212

0

我認爲代碼是不必要的複雜。我收集你正試圖將符號與安全名稱相關聯,並且還要將符號和安全名稱分別列爲列表。正則表達式在這裏可能是個好主意。

import re 
r = re.compile(r'Stock|ETF') 
list_sym = {} # NOTE: A dict - keys symbols, values security names 
for file in glob.glob('./stocklist/*.txt'): 
    with open(file) as input: 

     for line in input: 
     # split line into variables.. trash will have no use 
     symbol, security_name, trash = line.split('|', 2) 

     if r.match(security_name): # something matches 
      # stores values in array 
      list_sym[symbol.lower()] = security_name # just to be safe 

symbols = list_sym.keys() 
security_names = list_sym.values() 

這廣泛地解釋了這個想法。可能需要進行一些編輯才能嘗試嘗試實現的目標。