gpt4 book ai didi

python - 在文件中找到最小的 float 并打印行

转载 作者:行者123 更新时间:2023-11-28 21:16:12 25 4
gpt4 key购买 nike

我有这样一个数据文件:

1 13.4545
2 10.5578
3 12.5578
4 5.224

我试图找到具有最小 float 的行并将整行(包括整数)打印或写入另一个文件。所以我明白了:

4 5.224

我有这个但是不起作用:

with open(file) as f:
small = map(float, line)
mini = min(small)
print mini

也试过用这个:

with open(file) as f:
mylist = [[line.strip(),next(f).strip()] for line in f]
minimum = min(mylist, key = lambda x: float(x[1]))
print minimum

最佳答案

使用您的数据文件,我们可以在 min 中迭代文件的每一行,因为 min 采用迭代器:

>>> with open(fn) as f:
... print min(f)
...
1 13.4545

很明显,就是用整数的ascii值来确定min。

Python 的 min接受一个关键函数:

def kf(s):
return float(s.split()[1])

with open(fn) as f:
print min(f, key=kf)

或者:

>>> with open(fn) as f:
... print min(f, key=lambda line: float(line.split()[1]))
...
4 5.224

优点(在两个版本中)是逐行处理文件——无需将整个文件读入内存。

打印整行,但仅浮点部分用于确定该行的最小值。


要修复您的版本,问题是您的第一个列表理解。您的版本中有 next(),您可能认为它是下一个数字。它不是:它是下一行:

>>> with open(fn) as f:
... mylist = [[line.strip(),next(f).strip()] for line in f]
...
>>> mylist
[['1 13.4545', '2 10.5578'], ['3 12.5578', '4 5.224']]

第一个列表理解应该是:

>>> with open(fn) as f:
... mylist=[line.split() for line in f]
...
>>> mylist
[['1', '13.4545'], ['2', '10.5578'], ['3', '12.5578'], ['4', '5.224']]

然后剩下的就可以正常工作了(但在这种情况下你将得到拆分列表——而不是要打印的行):

>>> minimum=min(mylist, key = lambda x: float(x[1]))
>>> minimum
['4', '5.224']

关于python - 在文件中找到最小的 float 并打印行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29081693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com