比较python中的三个字符串

比较python中的三个字符串,python,string,time,string-comparison,Python,String,Time,String Comparison,在字符串中,我有数据,表示跑步比赛时间。 例如,我有一个要比较的字符串0,我想打印离它们最近的字符串 输入时间:37:30 该时间之间的字符串:37:31和36:50 for i in list: if i <= time: print i break 所以我想打印出37:31 我的条件不对,因为它打印的是36:50 for i in list: if i <= time: print i break 列表中

在字符串中,我有数据,表示跑步比赛时间。 例如,我有一个要比较的字符串0,我想打印离它们最近的字符串

输入时间:
37:30

该时间之间的字符串:
37:31和36:50

for i in list:
    if i <= time:
       print i
       break
所以我想打印出
37:31

我的条件不对,因为它打印的是
36:50

for i in list:
    if i <= time:
       print i
       break
列表中的i的

如果i您的测试失败,因为它报告第一次发现的次数较少,而不是最接近的次数


不想转换成秒是个问题。您需要最小的距离,这需要计算输入时间和候选时间之间的差。要计算两个字符串之间的差异,并没有简单的方法可以满足您的需要。进行转换有什么异议?

如果不转换为秒,您可以比较字符串,但无法计算它们之间的差异。对于您的情况,差异是相关的,因为您希望打印最接近的时间。做一些类似于:

def convert(string):
    min, sec = string.split(':')
    return min*60 + sec
假设您的
列表
按升序排序,请执行以下检查:

for i in range(len(list)):
    if list[i] > time:
        if i == 0: # the very first string is greater, so it's also the closest
            print(list[i])
            break
        diff1 = convert(time) - convert(list[i-1])
        diff2 = convert(list[i]) - convert(time)
        if diff1 < diff 2: # lis[i-1] is closer
            print(list[i-1])
        else:
            print(list[i])
        break
范围内i的
(len(list)):
如果列表[i]>时间:
如果i==0:#第一个字符串更大,因此也是最接近的字符串
打印(列表[i])
打破
diff1=转换(时间)-转换(列表[i-1])
diff2=转换(列表[i])-转换(时间)
如果diff1
您可以在float中转换列表,然后找到最小的差异。但正如BoarGules所说,不能用这种方式比较字符串

下面是一个您可以做的示例:

>>> list 
['37:30', '36:51', '37:29'] 
>>> time
'37:28'
>>> list2=[float('.'.join(i.split(':'))) for i in list]
>>> time2=float('.'.join(time.split(':')))
>>> min(list2, key=lambda x:abs(x-time2))
37.29
编辑

>>> list=['12:37:21', '11:23:15', '12:37:28']
>>> time='11:24:12'
>>> list2=[int(''.join(i.split(':'))) for i in list]
>>> time2=int(''.join(time.split(':')))
>>> out=str(min(list2, key=lambda x:abs(x-time2)))
>>> out=out[:2]+':'+out[2:4]+':'+out[4:]
>>> out
'11:23:15'

请提供一个为什么我不想做转换?因为对于不同的距离我有不同的时间格式(hh:mm:ss,mm:ss,ss.ms),所以我需要编写更多的if/else条件。对于给定的时间格式,非常好的简短解决方案。但是如果我有hh:mm:ss格式,它就不能转换成float@KubaRonkiewicz请参阅我的帖子中的编辑