给出一个列表:
a = [-20,-15,-10,-5,0]
另一个:
b = [-3,-10,-14,-19,-13,-5,-0.5]
我现在需要一个结果字典,如下所示:
N = {'-20 to -15': [-19], '-15 to -10': [-14,-13,-10], '-10 to -5': [-3,-5], '-5 to 0': [-0.5]}
现在的问题是,我已经不能得到正确的“范围”检查。有人能帮我解决代码中的错误吗?我尝试通过while循环获取索引:
j=0
while j < len(a):
index1 = next(x[0] for x in enumerate(b) if x[1] >= a[j])
index2 = next(x[0] for x in enumerate(b) if x[1] < a[j+1])
j=+1
似乎有一个问题,不知何故与比较的负值,至少我认为。我将非常感谢帮助!
7条答案
按热度按时间d7v8vwbk1#
字典解析中的列表解析应该做到这一点:
说明:
list(zip(a, a[1:]))
:生成范围作为元组列表[x for x in b if i <= x <= j]
:生成给定范围内的值列表f"{i} to {j}"
:格式化字典键ikfrs5lh2#
您的代码示例根本不会产生您所期望的结果。恐怕你不知道你使用的函数的乘积是什么(
next
和enumerate
)。但这里有一个简单的代码来产生预期的结果:
42fyovps3#
这将为您提供范围列表:
你只需要使用一些格式。
llycmphe4#
你可以用一个字典和列表解析来实现这一点。你可以创建你想要使用的字典,并在其中循环B以包含你想要的值。
为了做到这一点,你还需要一个你想要的低值和高值的列表。通过偏移a并将其与自身压缩,您可以创建该列表。
ryoqjall5#
下面的代码非常简单。它提供所需的输出。
suzh9iv86#
其他人提出了二次方法,但这可以在对数线性时间内完成(为了简单起见,我使用地板除以5自动生成边界):
u91tlkcl7#
你可以使用一个类似于
pairwise()
itertools的helper函数和一个字典理解来完成它:输出: