簡體   English   中英

如何在python中檢查列表值范圍內的值

[英]How to check a value in a list value range in 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值(如果可用),我想打印給定間隔中可用的toa值多少次,以同樣的方式我想檢查quali(列表)中的值

您可以使用以下列表推導:

>>> 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函數轉換為int

然后,您可以像下面這樣使用列表理解來檢查會員資格:

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

但是,如果您不希望出現這種情況,那么該range將不包含start而不會包含end當您要創建范圍時,需要增加起點:

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

您必須將每個字符串解析為一個起始值和終止值(整數):

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()對象,您還可以使用比較運算符:

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

這將更快,因為您無需創建其他range()對象。

您可能想存儲這些整數:

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

不必每次都解析它們。

如果您需要針對大量間隔進行大量此類測試,請考慮改為使用間隔樹數據結構。 在間隔樹中,找到匹配范圍(間隔)需要O(log N)時間,而直接搜索需要O(N)。 因此,要測試10000個范圍,只需100個步驟即可找到所有匹配項,而使用上面的直接搜索則只需10000個步驟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM