检查列表中的值是否出现在另一个列表中
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,以去除重复项。
我有一个包含 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,以去除重复项。