如何在python中检查列表值范围中的值

2024-06-01 00:55:47 发布

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

我有一个值要在列表范围内检查

示例:

    recipies = int(input("enter:"))
print(recipies)
interval =[]
for i in range(recipies):
    x = (input().split())
    interval.append(x)
print(interval)
agroup =int(input("enter:"))
print(agroup)
qali = []
for i in range(agroup):
    x = (input().split())
    qali.append(x)
print(qali)
for cmp in qali:
    toa = cmp[1:]

Input:
4
1 4
3 10
2 6
5 8
3
1 5
2 2 6
3 1 10 9

Output:
3
4
2

这里我想检查时间间隔内toa值是否可用,如果可用,我想打印在给定时间间隔内该值可用的次数,就像我要检查quali(list)中的值一样


Tags: inforinputrangeintsplitprintenter
2条回答

您必须将每个字符串解析为起始值和结束值(整数):

ranges = ['1,9', '2,10']

for start_stop in ranges:
    start, stop = map(int, start_stop.split(','))
    if toa in range(start, stop):
        print('yes')

不必创建新的range()对象,只需使用比较运算符:

^{pr2}$

这会更快,因为您不需要创建额外的range()对象。在

您可能希望存储这些整数:

ranges = [[int(i) for i in start_stop.split(',')] for start_stop in ranges]

不必每次都解析它们。在

如果您需要针对大量的时间间隔执行大量这些测试,请考虑使用Interval Tree数据结构。在区间树中,查找匹配范围(间隔)需要O(logn)时间,而直接搜索则需要O(N)。因此,对于10000个范围进行测试,只需100步就能找到所有匹配项,而使用上面使用的直接搜索则需要10000步。在

您可以使用以下列表理解:

>>> f_list=[map(int,i.split(',')) for i in li]
>>> ['yes' if toa in range(i,j) else 'No' for i,j in f_list]
['yes', 'yes']

首先,你需要提取你的范围,用,分割字符串,然后用map函数转换成{}。在

然后您可以使用如下列表理解来检查成员船:

^{pr2}$

但并不是说range将包含start,而不是{}如果你不想这样的话,你需要在创建范围时增加你的起始值:

>>> ['yes' if toa in range(i+1,j) else 'No' for i,j in f_list]
['yes', 'No']

相关问题 更多 >