2016-05-23 4 views
1

Основной контур этой проблемы состоит в том, чтобы прочитать файл, искать целые числа, используя re.findall(), ища регулярное выражение '[0-9] +', а затем преобразование извлеченных строк к целым числам и суммированию целых чисел.Пояснение списка; уплотнение кода на две строки

Я закончил проблему, но я хотел бы добавить дополнительные данные и сконденсировать код до двух строк.

Это мой исходный код:

import re 

fh = raw_input("Enter filename: ") 
#returns regex_sum_241882.txt as default when nothing is entered 
if len(fh)<1 : fh = "regex_sum_241882.txt" 
file = open(fh) 
sums = list() 
#goes through each line in the file 
for line in file: 
    #finds the numbers in each line and puts them in a list 
    nums = re.findall('[0-9]+',line) 
    #adds the numbers to an existing list 
    for num in nums: 
     sums.append(int(num)) 
#sums the list 
print sum(sums) 

Теперь вот мой текущий компактный код:

import re 
lst = list() 
print sum(for num in re.findall('[0-9]+',open("regex_sum_241882.txt").read())): int(num)) 

Он не работает и дает мне SyntaxError: недопустимый синтаксис

Может кто-нибудь указывает мне в правильном направлении? Я чувствую, что делаю то же самое, но я не уверен, что такое синтаксис.

+2

Вы должны смотреть на то, как выражения генератора структурированы: это '(пункт для пункта в итерации)', а не '(для пункта в итерации: пункт)'. – RoadieRich

+0

ohhhhh, я вижу это – rookiesix

ответ

1

Попробуйте так:

print sum(int(num) for num in re.findall('[0-9]+', open("regex_sum_241882.txt").read())) 
+0

Вы также можете получить больше исходного кода, используя '... open (raw_input (« Enter filename: ») или« regex_sum_241882.txt »). Read()' – donkopotamus

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