如何在包含字符串和数字的行文件中查找编号最大的行
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
答案 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
参数,在这种情况下,它表示将行除以'|'
,并使用七个位置的值作为键。这些答案还假设速度是整数,如您的示例所示。