比较 python 中的三个字符串
Compare three strings in python
在字符串中我有数据,代表 运行 比赛时间。
例如,我有一个要比较的字符串,我想打印最接近它们的字符串。
输入时间:37:30
那个时间之间的字符串:37:31 and 36:50
所以我要打印出来37:31
。
我的条件是错误的,因为它打印 36:50
for i in list:
if i <= time:
print i
break
我不想将字符串转换为秒。
你的测试失败了,因为它第一次报告它发现更少,而不是最近的。
不想转换为秒是个问题。您想要最小的距离,这需要计算输入时间和候选时间之间的差异。没有简单的方法来计算两个字符串之间的差异来满足您的要求。反对转换的理由是什么?
不转换为秒,您可以比较字符串,但无法计算它们之间的差异。对于您的情况,差异是相关的,因为您想要打印最接近的时间。做类似的事情:
def convert(string):
min, sec = string.split(':')
return min*60 + sec
假设您的 list
是按升序排列的,请执行以下检查:
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
您可以将列表转换为浮点数,然后找到最小的差异。但正如 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'
在字符串中我有数据,代表 运行 比赛时间。 例如,我有一个要比较的字符串,我想打印最接近它们的字符串。
输入时间:37:30
那个时间之间的字符串:37:31 and 36:50
所以我要打印出来37:31
。
我的条件是错误的,因为它打印 36:50
for i in list:
if i <= time:
print i
break
我不想将字符串转换为秒。
你的测试失败了,因为它第一次报告它发现更少,而不是最近的。
不想转换为秒是个问题。您想要最小的距离,这需要计算输入时间和候选时间之间的差异。没有简单的方法来计算两个字符串之间的差异来满足您的要求。反对转换的理由是什么?
不转换为秒,您可以比较字符串,但无法计算它们之间的差异。对于您的情况,差异是相关的,因为您想要打印最接近的时间。做类似的事情:
def convert(string):
min, sec = string.split(':')
return min*60 + sec
假设您的 list
是按升序排列的,请执行以下检查:
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
您可以将列表转换为浮点数,然后找到最小的差异。但正如 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'