我有一个来自.txt文件的表,我需要找到最小值和最大值

时间:2013-10-31 00:46:23

标签: python

我有一个制作表格的函数

--------------------------------------------------------------------
|Name  |     A      |     B     |     C      |    D     |    E      |
--------------------------------------------------------------------
|  1   |    1.0     |    2.0    |    3.0     |   4.0    |   5.0     |
|  2   |    6.0     |    7.0    |    8.0     |   9.0    |   0.0     |
|  3   |    1.1     |    2.2    |    3.3     |   0.1    |   0.3     |
--------------------------------------------------------------------

之后,我需要询问用户他们需要做什么,或者获得最小值或最大值。之后,我需要询问他们是否想要通过行或列进行最小化,到目前为止,我可以获得第1行的最小值,但是当我尝试执行第2行或任何列时,它仍然会返回第1行的相同值

def minimum(y,l):
    for y in l:
        if y == 1:
            i= 0
            w=(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
            a= min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
        elif y == 2:
            i = 5
            w=(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
            a= min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
        return a


def menu(x,l): 
    if x == 1:
        make_table(l)
    if x == 2:
        y = input("enter a row (as a number) or a column (as an uppercase letter)")
        if y in [ '1','2','3']:
            mini = minimum(y, l)
            print("Minimum is:", mini)
    if x == 3:
        print ('bye')

我需要一个min的帮助然后我可以以相同的方式工作max,谢谢

3 个答案:

答案 0 :(得分:0)

def minimum(y,l):
    a = 0
    for y in l:
        if y == 1:
            i= 0
            w=(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
            a= min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
        elif y == 2:
            i = 5
            w=(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
            a= min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
    return a

如果用户输入3,你会怎么做?你尚未考虑这个案例。

答案 1 :(得分:0)

为什么不将值存储在numpy 2d数组中?

import numpy as np

a = np.array(l).reshape(3,5)
minByCol = np.amin(a, axis=0) #array([ 1. ,  2. ,  3. ,  0.1,  0. ])
minByRow = np.amin(a,axis=1)  #array([ 1. ,  0. ,  0.1])

编辑: 由于你不能导入任何东西,我认为这是一种任意的家庭作业问题。

我不倾向于为你做功课,但这里有一些想法。为什么不采取切片而不是笨拙的a=min(l[i],l[i+1],l[i+2],l[i+3],l[i+4]) a = min(l[i:i+5])

而不是针对每种情况采取案例并手动设置i的值,为什么不根据i的值设置y的值,然后你就可以摆脱if个陈述。如果是一个包含5列的表,则按行排列i = (y-1)*5

答案 2 :(得分:0)

您是否知道可以使用列表作为参数调用minmax

假设您的数据类似于:

l= [[1.0, 2.0, 3.0, 4.0, 5.0],
    [6.0, 7.0, 8.0, 9.0, 0.0],
    [1.0, 2.2, 3.3, 0.1, 0.3]]

如果用户想要行y的最小值,则只需调用min(l[y-1])(即如果您的行从1开始编号)

现在,如果用户想要一个列的分钟,那就更困难了(但只是一点点)

  • 首先你必须从信中得到索引。 ord函数将char转换为int。 “A”为65,因此要获取列索引,请调用index = char(letter)-65

  • 然后,您需要转置原始数据的行和列。 zip功能可以帮助您实现这一目标。

所以:

index = char(letter) - 65
transpo = zip(*l)
print min(transpo[index])