我有一个像这样的输入文件
输入:
20
23 121 20
35 113 11
12 15 142
17 90 110
58 12 198
......
我想创建一个列表,其中每行中的数字分配给不同的变量。我想这样做..
def prog(inStr): input = inStr.split() N = int(input[0]) list = [] for i in range(N): row1 = int(input[1]) row2 = int(input[2]) row3 = int(input[3]) r = prog(row1, row2, row3) list.append(r)
但如果这样执行,它就不应该正常工作..
row1 = int(input[i*3+1])
row2 = int(input[i*3+2])
row3 = int(input[i*3+3])
引发错误,索引超出范围。
感谢您的帮助。
答案 0 :(得分:1)
不是在所有空格上拆分输入,而是首先将其拆分为行分隔符:
def prog(inStr):
lines = inStr.splitlines()
N = int(lines[0])
result = []
for index in range(N):
row1, row2, row3 = map(int, lines[index + 1].split())
如果inStr
来自文件或标准输入,您可以直接从输入中读取:
from itertools import islice
test_count = int(next(fileobj))
result = [r(*map(int, line.split())) for line in islice(fileobj, test_count)]
这使用列表推导,itertools.islice()
给出一个硬限制迭代次数,并使用参数解包来产生结果列表。
答案 1 :(得分:0)
看起来您正在尝试从文件中解析2D数组,您可以通过以下方式将文件解析为名为A的Numpy 2D数组:
import numpy
f=open("file.txt")
i=0
for line in f:
line=line.rstrip("\r\n")
if line!="":
if i==0:
N=int(line)
A=numpy.zeros((N, 3))
else:
splittedRow=line.split()
A[i-1,0]=int(splittedRow[0])
A[i-1,1]=int(splittedRow[1])
A[i-1,2]=int(splittedRow[2])
i+=1
print A
答案 2 :(得分:0)
试一试
rows = inStr.split('\n')
count = int(rows[0])
for row in rows[1:]:
yourList.append(prog(*map(int, row.split())))
答案 3 :(得分:0)
目前还不清楚你要做什么,但我怀疑这是通常的编程竞争,你可以做到这一点:
N = input()
for _ in range(N):
a, b, c = map(int, raw_input().split())
print(a, b, c)
当然不是打印a
,b
和c
,而是与他们一起做你应该做的事情。
或者,如果您真的想将输入收集为行列表:
N = input()
rows = [map(int, raw_input().split()) for _ in range(N)]