2015-05-14 3 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 

То, что я пытаюсь достичь здесь является только добавить элемент в массив, если word1 и word2 находятся в строке 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 Составить список, просто добавить в список. Вы можете добавить что-нибудь в список.

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() 

В целом это объясняет идею. Некоторые изменения могут потребоваться, чтобы попробовать то, что вы пытаетесь достичь.

Смежные вопросы