簡體   English   中英

查找列表b的子列表中的項目范圍內的列表a中的項目

[英]Find if item in list a in range of items in sublist of list b

假設我有兩個清單。

x = [2,12,33,40,500]
y = ['1_4','9_11','38_50','300_400']

我想遍歷x並確定它是否在y中的其他項目范圍內(在'_'上分割后)。 如果真是這樣,它將退出循環,因為它不需要檢查其他對象。 我不是要查看它屬於多少范圍,而只是出現一次。

我認為此代碼可能有效,但想再次檢查。

x = [2,12,33,40,500]
y = ['1_4','9_11','38_50','300_400']

dict = {}

for i in x:
    for j in y:
        j_1 = int(j.split('_')[0])
        j_2 = int(j.split('_')[1])
        if i in range(j_1,j_2):
            dict[i] = 'yes'
            break
        else:
            dict[i] = 'no'
            #the else statement is what's tricking me

在此示例中,解決方案應產生以下結果:

dictt = {2:'yes',12:'no',33:'no',40:'yes',500:'no'}

由於您要對案例y和列表y任何組合進行測試,為什么不使用any

x = [2,12,33,40,500]
y = ['1_4','9_11','38_50','300_400']

y_new = [(int(a),int(b)) for i in y for a,b in zip(i.split("_"),i.split("_")[1:])]

l = {item:"Yes" if any(a<item<b for a,b in y_new) else "No" for item in x}

print (l)

#{2: 'Yes', 12: 'No', 33: 'No', 40: 'Yes', 500: 'No'}

如何檢查數字是否在y列表中的任何數字范圍之間。

>> x = [2,12,33,40,500]
>> y = ['1_4','9_11','38_50','300_400']
>> y_new = map(lambda x: tuple(map(int, x.split('_'))), y)
# y_new = [(1, 4), (9, 11), (38, 50), (300, 400)]
>> def check_in_range(number):
        found = 'no'
        for each_range in y_new:
             if each_range[0] <= number <= each_range[1]:
                 found = 'yes'
        return found
>> dict(zip(x, map(check_in_range, x)))
>> {2: 'yes', 12: 'no', 33: 'no', 40: 'yes', 500: 'no'}

注意:否則,如果您使用的是Python 2,請始終使用xrange而不是range xrange不會將所有數字保留在該范圍內的內存中。 當范圍更大時,這將是一個問題。 Python3將默認為xrange。

確實有效。 當你寫的時候。

x = [2,12,33,40,500]
y = ['1_4','9_11','38_50','300_400']
dict = {}

for i in x:
    for j in y:
        j_1 = int(j.split('_')[0])
        j_2 = int(j.split('_')[1])
        if i in range(j_1,j_2):
            dict[i] = 'yes'
            break
        else:
            dict[i] = 'no'

返回輸出:

{2: 'yes', 12: 'no', 33: 'no', 40: 'yes', 500: 'no'}

暫無
暫無

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

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