我是Python的初学者。为了练习它,我从Code Abbey进行练习。他们通常将输入数据显示为数字列。在下面的示例中,我应该计算算术序列的第一个成员的总和。输入数据分为三列:
25 12 77
27 14 95
8 0 30
...
其中第一列中的数字是序列的起点,第二列中的数字是增量值,最后一列中的数字显示应该求和的值数。
由于这些带有输入数据的列表通常很长,因此我不想将它们硬编码在脚本中。因此,我将它们复制,粘贴并保存在纯文本文件中。 在继续练习之前,我必须经历四个“ for”循环,才能将初始文本文件转换为可行的格式(从字符串转换为整数)。此外,我还必须创建几个列表,然后在列表中附加后续结果。
在第一个“ for”循环之后,我得到了一个字符串列表:['25 12 77','27 14 95',...。]
在第二个“ for”循环之后,我得到了字符串列表的列表[['25','12','77'],['27','14','95']…] >
在第三个和第四个(嵌套)“ for”循环之后,我终于收到了一个整数列表[25、12、77、27、14、95…]
with open("input_progression.txt") as file:
for line in file:
line = line.strip()
lines.append(line)
for strings in lines:
strings = strings.split(' ')
g.append(strings)
for sublist in g:
for item in sublist:
flat_list.append(item)
flat_list = list(map(int, flat_list))
for numbers in range(int(len(flat_list) / 3)):
for integer in range(0, flat_list[counter + 2]):
result += (flat_list[counter] + flat_list[counter + 1] * integer)
outcome.append(result)
counter += 3
result = 0
print (outcome)
这是一件很乏味的工作(所有这些对我来说都是新的)。您是否知道任何更简单(或可能是Pythonian)的方法?在某处有教程如何使用文本文件作为输入?
答案 0 :(得分:0)
尝试:
with open("input_progression.txt") as f:
outcome = [int(item) for sublist in [l.split() for l in f] for item in sublist]
print(outcome)
答案 1 :(得分:0)
这更短,更精确
flat_list = []
outcome = []
counter = 0
result = 0
with open("input_progression.txt") as file:
for line in file:
line = line.strip().split(' ')
if len(line) >= 1: flat_list.append(line)
flat_list = [int(item) for sublist in flat_list for item in sublist]
for numbers in range(int(len(flat_list) / 3)):
for integer in range(0, flat_list[counter + 2]):
result += (flat_list[counter] + flat_list[counter + 1] * integer)
outcome.append(result)
counter += 3
result = 0
print (outcome)
答案 2 :(得分:0)
您可以使用更少的循环。
with open("input_progression.txt") as file:
for line in file:
line = line.strip()
line = line.split(" ")
start = int(line[0])
incr_val = int(line[1])
num_loops = int(line[2])
for n in range(num_loops):
start += incr_val #Increment
print(start) #answer for each row
答案 3 :(得分:0)
您可以使用正则表达式更轻松地解析文本文件。
import re
file = open("input_progression.txt", "r")
text = ""
for line in file:
text = text + line
outcome = [int(num) for num in re.findall("[0-9]+", text)]
print(outcome)