[英]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.