python:如何找到最大的行?

时间:2018-09-12 15:48:01

标签: python list max

如何在包含字符串和数字的行文件中查找编号最大的行

def topSpeed(cars): 

y = raw_input("car type:")
with open("cars","r") as f:
    for l in f.readlines():
        list = []
        p = l.strip().split("|")
        type = p[1]
        max_speed = p[7]
        if y == type:
            list.append(l)
            a = 0
            for i in list:
                p = i.strip().split("|")
                max_speed = p[7]                    
                if max_speed > a:
                    a = max_speed
                    print(i)
                    pass 
                else:
                    print("...")    

        else:
            print("no cars of that type")

我尝试执行此操作,但是它会打印所有输入类型的汽车

和汽车清单是:

a1|bmw|a|3.5|2.6|1.6|2018|150|3|5|x
a2|audi|a|2.50|1.60|4.50|2017|220|3|2|y
a3|audi|b|2.30|1.80|5.00|2011|180|4|4|x
a4|bmw|b|duz|vis|sir|god|230|3|5|y

2 个答案:

答案 0 :(得分:0)

您的问题出在循环中

for i in list:
    p = i.strip().split("|")
    max_speed = p[7]                    
    if max_speed > a:
        a = max_speed
        print(i)
         pass 
    else:
        print("...")

这将在每次max_speed> a时打印出“ i”,因此,如果您的最大速度按升序排列,它将打印出每辆车。您需要做的是以最高速度保存汽车,然后在最后打印出来。

max_speed_car = ''
for i in list:
    p = i.strip().split("|")
    max_speed = p[7]                    
    if max_speed > a:
        a = max_speed
        max_speed_car = i
        pass 
    else:
        print("...")
print(max_speed_car)

类似的事情应该做到。这是在我的计算机上正常工作的完整代码:(我正在运行python 3.6)

def topSpeed(cars):
    y = input("car type:")
    with open(r"\cars.txt","r") as f:
            for l in f.readlines():
        list = []
        p = l.strip().split("|")
        type = p[1]
        max_speed = p[7]
        if y == type:
            list.append(l)
    a = 0
    max_speed_car = ''
    for i in list:
        p = i.strip().split("|")
        max_speed = int(p[7])                    
        if (max_speed > a):
            a = max_speed
            max_speed_car = i

        else:
            print("...")

    print(max_speed_car) 

答案 1 :(得分:0)

假设速度始终位于七个位置,则可以尝试以下操作:

with open('cars.txt') as infile:
    speed = max(infile.readlines(), key=lambda l: int(l.strip().split('|')[7]))
    print(speed)

输出

a4|bmw|b|duz|vis|sir|god|230|3|5|y

您可以使用key函数的max参数,在这种情况下,它表示将行除以'|',并使用七个位置的值作为键。这些答案还假设速度是整数,如您的示例所示。