如何在追加到python中的列表之前将行附加到不同的变量

时间:2015-05-16 18:22:32

标签: python python-2.7

我有一个像这样的输入文件

输入:

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

引发错误,索引超出范围。

感谢您的帮助。

4 个答案:

答案 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)

当然不是打印abc,而是与他们一起做你应该做的事情。

或者,如果您真的想将输入收集为行列表:

N = input()
rows = [map(int, raw_input().split()) for _ in range(N)]