2014-11-01 2 views
1

Я пытаюсь добавить файл txt в список на Python, затем перебираю список, находя номера и добавляя их все вместе.Итерация через список для добавления значений

образец текста:

Alabama 4780 
Alaska 710 
Arizona 6392 
Arkansas 2916 
California 37254 
Colorado 5029 

ожидается выход:

['Alabama', '4780', 'Alaska', '710', 'Arizona', '6392', 'Arkansas', '2916', 'California', '37254', 'Colorado', '5029'] 

total population: 57621 

Я могу добавить их в список просто отлично, но я не смог найти сумму всех чисел. В идеале я хотел бы иметь все это в одной функции.

def totalpoplst(filename): 
    lst = [] 
    with open(filename) as f: 
     for line in f: 
      lst += line.strip().split(' ') 
     return print(lst) 
    totalpop() 

def totalpop(filename): 
    total_pop = 0 
    for i in lst: 
     if i.isdigit(): 
      total_pop = total_pop + i.isdigit() 
    return print(total_pop) 

def main(): 
    filename = input("Please enter the file's name: ") 
    totalpoplst(filename) 

main() 
+0

делает ваш файл имеет два перевода строки ?? – Hackaholic

+0

нет его только одной новой строки, текст имеет название состояния без пробелов, за которым следует пробел, а затем номер популяции – Cos

+0

Я знаю, что это долго читать, но здесь есть отличный учебник по python: https://docs.python.org/2/tutorial/и здесь: http://pymotw.com/2/contents.html – dnozay

ответ

1

Лучше использовать dict для структур данных ключ-значение, чем в списке.

>>> population = {} 
>>> total = 0 
>>> with open('list.txt', 'r') as handle: 
...  for line in handle: 
...   state, sep, pop = line.partition(' ') 
...   population[state] = int(pop) 
...   total += population[state] 
... 
>>> total 
57081 
+0

o хорошая точка, вы имеете в виду, как использовать хеш-таблицу или установить – Cos

+0

да, как хэш-таблица. – dnozay

+0

Быстрый вопрос, чтобы не сказать, что я хотел использовать set(). Как добавить каждую строку из текстового файла в набор? – Cos

3

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

total_pop = total_pop + i.isdigit() 

следующим образом:

total_pop = total_pop + int(i) 
-1
f = open('your_file.txt') 
your_dict={} 
total_pop = 0 
for x in f: 
    x=x.strip() 
    s,p=x.split(' ') 
    your_dict[s]=p 
    total_pop +=int(p) 
print your_dict 
print total_pop 

словарь использовать будет лучше

+0

может сказать мне, почему downvoting ??? любая причина или я ошибаюсь ?? – Hackaholic

+0

ahh это была типичная ошибка – Hackaholic

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