首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中找到行和列的最小/最大值?

如何在Python中找到行和列的最小/最大值?
EN

Stack Overflow用户
提问于 2011-10-22 04:21:59
回答 4查看 53K关注 0票数 1

我想知道如何从基本上是文本文件的数据集中找到最小值和最大值。它有50行,50列。

我知道我可以设置一个控制循环(具体来说是for loop ),让它读取每一行和每一列,并确定最小/最大值。但是,我不确定该怎么做。

我认为需要先将行和列转换为list,然后再使用split()函数。我尝试按如下方式进行设置,但似乎不起作用:

代码语言:javascript
运行
复制
for x in range(4,50): # using that range as an example
    x.split()
    max(4,50)
    print x

Python新手。请原谅我的错误。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-22 04:38:20

尝试如下所示:

代码语言:javascript
运行
复制
data = []
with open('data.txt') as f:
    for line in f:                   # loop over the rows
        fields = line.split()        # parse the columns
        rowdata = map(float, fields) # convert text to numbers
        data.extend(rowdata)         # accumulate the results
print 'Minimum:', min(data)
print 'Maximum:', max(data)

请注意,如果您想拆分空格以外的内容(例如逗号),则split()需要一个可选参数。

票数 3
EN

Stack Overflow用户

发布于 2011-10-22 04:35:08

如果文件包含一个规则的(矩形)矩阵,并且您知道它包含多少行标题信息,那么您可以跳过标题信息,并使用NumPy特别容易地做到这一点:

代码语言:javascript
运行
复制
import numpy as np

f = open("file.txt")
# skip over header info
X = np.loadtxt(f)
max_per_col = X.max(axis=0)
max_per_row = X.max(axis=1)
票数 3
EN

Stack Overflow用户

发布于 2011-10-22 04:39:59

Hmmm...are您确定homework不适用于此吗?;)不管怎样:

您不仅需要拆分输入行,还需要将文本值转换为数字。因此,假设您已经将输入行读入in_line,您将执行如下操作:

代码语言:javascript
运行
复制
...
row = [float(each) for each in in_line.split()]
rows.append(row) # assuming you have a list called rows
...

一旦有了行的列表,就需要获取列:

代码语言:javascript
运行
复制
...
columns = zip(*rows)

然后,您可以只迭代调用max()的每一行和每一列:

代码语言:javascript
运行
复制
...
for each in rows:
    print max(each)
for eac in columns:
    print max(each)

编辑:下面是更完整的代码,展示了如何打开文件、遍历文件的各行、关闭文件以及使用上面的提示:

代码语言:javascript
运行
复制
in_file = open('thefile.txt', 'r')

rows = []
for in_line in in_file:
    row = [float(each) for each in in_line.split()]
    rows.append(row)

in_file.close() # this'll happen at the end of the script / function / method anyhow

columns = zip(*rows)

for index, row in enumerate(rows):
    print "In row %s, Max = %s, Min = %s" % (index, max(row), min(row))

for index, column in enumerate(columns):
    print "In column %s, Max = %s, Min = %s" % (index, max(column), min(column))

编辑:为了新学校的利益,不要使用我的旧的,危险的文件处理。使用新的安全版本:

代码语言:javascript
运行
复制
rows = []
with open('thefile.txt', 'r') as in_file:
    for in_line in in_file:
        row = ....

现在您已经得到了很多保证,即使您在读取文件时抛出异常,也不会意外地做一些不好的事情,比如让文件保持打开状态。此外,您可以完全跳过in_file.close(),而不会感到一点内疚。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7854859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档