检查列表中的值是否出现在另一个列表中

Checking if values in a list appear in another list

我有一个包含 2 个值的列表。我想将这些值与 3 个范围 (lotSize) 进行比较 - 每个范围都有一个与之关联的值 - 所以最终我希望能够在 2 个值之一落入 5 个范围中的任何一个时引用此最终值。

要比较的 2 个值:

countList = [150,250]

目前我有一个范围值列表,例如

lotSize = [{'range': range(100,200), 'finalValue': 10},{'range': range(201,300), 'finalValue': 20},{'range': range(301,400), 'finalValue': 30},]

我不知道如何查看 countList 中的值是否在范围之一内,如果为真,则获取“finalValue”——我想这里需要一个 for 循环?

您可以创建一个函数,将 countList 中的一个条目映射到最终值,然后使用 map()list()countList 中的每个元素重复此操作:

def get_final_value(item, lotSize):
    for entry in lotSize:
        if item in entry['range']:
            return entry['finalValue']
    
    raise ValueError(f"{item} is in not any of the ranges")

countList = [150,250]
lotSize = [{'range': range(100,200), 'finalValue': 10},{'range': range(201,300), 'finalValue': 20},{'range': range(301,400), 'finalValue': 30}]

result = list(map(lambda x: get_final_value(x, lotSize), countList))
print(result) # Prints [10, 20]
countList = [150,250,1000]

lotSize = [{'range': range(100,200), 'finalValue': 10},{'range': range(201,300), 'finalValue': 20},{'range': range(301,400), 'finalValue': 30},]

def get_fv(cl):
fv =[]
for c in cl:
    for ls in lotSize:
        r = ls['range']
        if c in r:
            fv.append(ls['finalValue'])
else:
      print(f"No range found for {c}")
return fv

print(get_fv(countList))  

输出:

No range found for 1000 
[10, 20]

我想到的最简单的方法如下:

[y["finalValue"] for y in lotSize for x in countList if x in y["range"]]

输出

[10, 20]

但请注意,如果 countSize 值都存在于 range 键中,这将导致重复。在这种情况下,您只需将其转换为set,然后将其转换为list,以去除重复项。