Python 用列的第一个值减去列的每个条目

Python 用列的第一个值减去列的每个条目,python,Python,我有一个文件,它有两列,如: 13.245 cat 14.323 dog 16.246 pig 我想用第一行的第一列值(这里是13.245)减去第一列的每个条目,并将结果写入另一个具有修改值的文件,以便输出文件看起来: 0.000 cat 1.078 dog 3.001 pig 我有一个非常粗糙的解决方案。我将值13.245存储在一个变量中,并拆分每一行,从split()[0]条目中减去13.245值,然后将该值和split()[1]值写入另一个以空格分隔的文件。我一行一行地做。有没有一种解

我有一个文件,它有两列,如:

13.245 cat
14.323 dog
16.246 pig
我想用第一行的第一列值(这里是13.245)减去第一列的每个条目,并将结果写入另一个具有修改值的文件,以便输出文件看起来:

0.000 cat
1.078 dog
3.001 pig

我有一个非常粗糙的解决方案。我将值13.245存储在一个变量中,并拆分每一行,从split()[0]条目中减去13.245值,然后将该值和split()[1]值写入另一个以空格分隔的文件。我一行一行地做。有没有一种解决办法不像这样粗糙。我的意思是,如果不将第一行条目的第一列存储到外部变量中,然后手动将entires写入另一个文件中,有什么swift方法吗

这可能是一种解决方案:

with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
    first_line = infile.readline().split()
    first_val = float(first_line[0])
    outfile.write("%.3f %s\n" % (0, first_line[1]))

    for line in infile:
        first_col, second_col = line.split()
        outfile.write("%.3f %s\n" % (float(first_col) - first_val, second_col))
def process_line(line, first_value, outf):
    parts = line.strip().split(' ')
    parts[0] = '%.3f' % (float(parts[0]) - first_value)
    print >>outf, ' '.join(parts)

with open('in.txt') as inf, open('out.txt', 'w') as outf:
    first_line = inf.readline().strip()
    first_value = float(first_line.split(' ', 1)[0])
    process_line(first_line, first_value, outf)
    for line in inf:
        process_line(line, first_value, outf)

你在要求做一件再容易不过的事。但这可能是你能做的最短的了。顺便问一下,Python的哪个版本?这是三个人的

with open('<file_name>') as input_file, open('<output_file>', 'w') as output_file:
    lines = list(map(lambda line: (float(line[0]), line[1]), map(lambda line: line.split(), input_file)))
    for line in lines:
        print(line[0] - lines[0][0], line[1], file=output_file)
将open(“”)作为输入文件,将open(“”,'w')作为输出文件:
行=列表(映射(lambda行:(float(行[0]),行[1]),映射(lambda行:line.split(),input_文件)))
对于行中的行:
打印(第[0]行-第[0][0]行,第[1]行,文件=输出文件)

nope..文件中没有空行。对不起,到目前为止你试过什么了吗?最后你必须阅读和分析每一行,做数学运算,然后写每一行。我认为它没有变得更好。这一行更短,但它将所有的行载入内存。如果文件太长,则可能会出现问题。@user1411416您已经在stackoverflow中提出了一些问题,但尚未接受任何问题。如果你不接受有用的答案,人们可能会决定不回答你未来的问题。谢谢你-现在包括在上面:)@TylerCrompton:哈哈,是的,我刚刚注意到我写了
int()
:P
with open('<file_name>') as input_file, open('<output_file>', 'w') as output_file:
    lines = list(map(lambda line: (float(line[0]), line[1]), map(lambda line: line.split(), input_file)))
    for line in lines:
        print(line[0] - lines[0][0], line[1], file=output_file)