如何检查元素中是否存在行分隔的列表中的值

2024-04-16 23:37:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要检查值(例如1317.5)是否存在于字符串列表中定义的范围中,例如:

L = ["12-14", "15-16", "17-20"]

例如,范围将是1214包括在内,1516,等等

我想:

if "13.5" in L:
    print("yes")
else:
    print("no")

预期输出:yes

我该怎么做?你知道吗


Tags: no字符串in列表if定义elseyes
3条回答

使用.split(),然后使用any与列表中的项进行比较

lst = ["12-14", "15-16", "17-20"]

if any(int(i.split('-')[0]) < 13.5 < int(i.split('-')[1]) for i in lst):
    print('yes')
else:
    print('no')
# yes

字符串表示有点粗糙,那么一个简单的类MyRange怎么样?在这个类中,您可以简单地为数xm的实例MyRange发出x in m?你知道吗

>>> 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

__contains__检查成功如果x等于端点,可以使用<而不是<=来更改此行为。你知道吗

假设列表中的项目表示范围,可以尝试以下操作:

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:假设所有数字都可以转换成float。你知道吗

相关问题 更多 >