Python 查找列表中的元素在另一个列表中的特定范围内的位置

Python 查找列表中的元素在另一个列表中的特定范围内的位置,python,list,loops,range,Python,List,Loops,Range,假设我有: l1=[0, 0.01, 0.03, 0.08, 0.13] l2=[0, 0.03, 0.09, 0.15] 我需要某种循环(while或for)来检查条件:检查l1中属于l2中特定范围(包括)的值,并打印出该范围的上限 输出应该如下所示:[0.03,0.03,0.03,0.09,0.15] 例如,l1中的第一个值为0,属于l2的0-0.03类别,因此打印该范围的上限,即0.03。接下来,0.01落在相同的范围内,因此再次打印0.03。第三,0.03也在相同的范围内,因此打印0.

假设我有:

l1=[0, 0.01, 0.03, 0.08, 0.13]
l2=[0, 0.03, 0.09, 0.15]
我需要某种循环(while或for)来检查条件:检查
l1
中属于
l2
中特定范围(包括)的值,并打印出该范围的上限

输出应该如下所示:
[0.03,0.03,0.03,0.09,0.15]

例如,
l1
中的第一个值为0,属于
l2
的0-0.03类别,因此打印该范围的上限,即0.03。接下来,0.01落在相同的范围内,因此再次打印0.03。第三,0.03也在相同的范围内,因此打印0.03的相同上限(因为它需要包含在内)。第四,0.08属于
l2
的0.03-0.09范围,因此打印0.09。最后一个值是.13,在0.09到0.15范围内,因此打印0.15

另外,我需要修改代码,这样如果
l1
开始的值小于
l2[0]
,我仍然希望使用0.03作为上限,因为它是
l2
中的最小上限。同样,如果
l1
的最后一个值大于
l2[-1]
,则继续打印
l2
中给出的最大上限

理想情况下,这需要适用于任何长度的
l1
l2
。谢谢

我试过这样的方法:

for indx_l1, val_l1 in enumerate(l1):
    for indx_l2, val_l2 in enumerate(l2):
        while val_l1<val_l2:
            print(val_l2)
对于枚举(l1)中的indx_l1、val_l1:
对于indx_l2,枚举(l2)中的val_l2:

使用列表时,在
l1
中循环每个元素,并检查大于该元素的最小数字:

[min([y if (y-x)>=0 else l2[-1] for y in l2[1:]]) for x in l1]
#[0.03, 0.03, 0.03, 0.09, 0.15]

这可以处理
l1
的值低于
l2[0]
和高于
l2[-1]
的两种情况,如您所愿。

请用您迄今为止尝试过的内容更新您的问题,以及您遇到的问题。while循环中的值永远不会改变,这就是您获得无限循环的原因,有没有办法迭代它们呢?我认为for循环会有帮助。不确定这是否需要另一个循环?一个简单的解决方案是对第二个列表进行排序,并使用for loop检查上界。第二个列表已被排序。谢谢您的努力。我的真实数据集的前几个元素是:
l1=[0.0,0.00273977260273972603,0.00821917808219178,0.01917808219780823]
l2=[0.0027777777778,0.041666666666666664,0.08333333333333333,0.12222222]
。我认为您的第一个解决方案工作得很好:
[min(l2,key=lambda I:I if(I-x)>=0 else float('inf'))表示l1中的x]
,它输出
[.00277...00277…,.0416…,.0416]
,但您的新解决方案只打印.0416。。。总之,我看到原始解决方案没有采用
l2
的最后一个值,如果
l1
中的最后一个元素更大(而是默认为
l2
的最小值),但您的新解决方案采用。新的一个唯一的问题是由于某种原因,它跳过了
l2
中的第一个元素,对于
l1
的前几个值,应该输出该元素。如果l1开始的值小于l2[0],您不希望吗?我仍然希望使用0.03作为上限,因为它是l2中最小的上限?这是否意味着根本不应该返回
l2
的第一个元素?也许你可以澄清一下。感谢您之前的评论,根据您的问题说明,它应该变成0.0416,除非我再次不清楚这个问题。对不起,我犯了一个错误,这是由于代码中的其他计算。你的代码工作得很好,谢谢你的帮助!