Python 如何检查列表中是否存在值,并在元素中以行分隔
我需要检查示例13或17.5的值是否存在于字符串列表中定义的范围内,例如:Python 如何检查列表中是否存在值,并在元素中以行分隔,python,list,Python,List,我需要检查示例13或17.5的值是否存在于字符串列表中定义的范围内,例如: L = ["12-14", "15-16", "17-20"] 例如,范围为12至14(含12至14),15至16,等等 我想: if "13.5" in L: print("yes") else: print("no") 预期产出:是 如何执行此操作?使用.split,然后使用任何 假设列表中的项目表示范围,您可以尝试以下操作: def check(x, ranges_list): x =
L = ["12-14", "15-16", "17-20"]
例如,范围为12至14(含12至14),15至16,等等
我想:
if "13.5" in L:
print("yes")
else:
print("no")
预期产出:是
如何执行此操作?使用.split,然后使用任何
假设列表中的项目表示范围,您可以尝试以下操作:
def check(x, ranges_list):
x = float(x)
for s in ranges_list:
start, end = s.split('-')
if float(start) <= x <= float(end):
return True
return False
my_ranges = ["12-14", "15-16", "17-20"]
if check('13.5', my_ranges):
print('yes')
else:
print('no')
Obs:这假设所有数字都可以转换为浮点。字符串表示有点粗糙,那么简单的类MyRange如何,您可以简单地为数字x和MyRange的实例m发出x in m
如果x等于端点,则_包含_u检查成功,您可以使用创建元组列表以方便查找来更改此行为
L = ["12-14", "15-16", "17-20"]
L_tup=[tuple(map(int,k.split('-'))) for k in L]
num=13
for i in L_tup:
if i[0] < num <i[1]:
print('yes')
break
else:
print('no')
那么…你想让Python给你错误的答案吗?我想它们可能是范围。你的项目是字符串,Python不会将它们理解为范围。@wim否,我想要预期的输出:是的…我不理解这方面的反对票。这似乎是一个合理的问题
>>> class MyRange:
...: def __init__(self, start, end):
...: self.start = start
...: self.end = end
...: def __contains__(self, x):
...: return self.start <= x <= self.end
...: def __repr__(self):
...: return '{}({!r}, {!r})'.format(type(self).__name__, self.start, self.end)
>>>
>>> lst = ["12-14", "15-16", "17-20"]
>>>
>>> my_ranges = [MyRange(*map(float, s.split('-'))) for s in lst]
>>> my_ranges
>>> [MyRange(12.0, 14.0), MyRange(15.0, 16.0), MyRange(17.0, 20.0)]
>>>
>>> any(13.5 in r for r in my_ranges)
>>> True
>>> any(11.7 in r for r in my_ranges)
>>> False
>>> any(17.5 in r for r in my_ranges)
>>> True
L = ["12-14", "15-16", "17-20"]
L_tup=[tuple(map(int,k.split('-'))) for k in L]
num=13
for i in L_tup:
if i[0] < num <i[1]:
print('yes')
break
else:
print('no')