且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Python,检查数字是否在列表中的多个范围内.

更新时间:2021-11-26 05:28:02

将它们全部扔进一本大词典中:

Toss them all in one big dictionary:

a_list = [2501, 2783, 3088, 3980, 465, 1001, 39392911, 39394382, 488955,489087, ......]
b_list = [474, 498, 47478821, 47479800, 3774, 8970, 484000, 486000......]
# into
ranges = {'a': [2501, 2783, 3088, 3980, 465, 1001, 39392911, 39394382, 488955,489087, ......],
          'b': [474, 498, 47478821, 47479800, 3774, 8970, 484000, 486000......]}

然后按顺序浏览每个列表,主要是您之前的操作方式:

Then go through each list in order, mostly the way you were doing it before:

numbers = [list of your target numbers]
scores = {} # dict to store results in

for number in numbers:

    for range_name in sorted(ranges):
        range_list = ranges[range_name]
        groups = zip(*[iter(range_list)] * 2)
        if any(start <= number < end for start,end in groups):
            scores.setdefault(range_name, 0) += 1

或者(我不确定这是否更快),您可以执行以下操作:

Alternatively (and I'm not sure if this is faster or not) you could do:

for number in numbers:
    for range_name in sorted(ranges):
        range = ranges[range_name]
        if sorted(range + [number]).index(number) % 2:
            scores.setdefault(range, 0) += 1

在这种情况下,您将一个新数字放入一个已排序的列表中,将其重新排序(使用TimSort可以快速排序),然后查看它是否落在两个现有数字之间.

In this case you're throwing a new number into a sorted list, re-sorting it (which is fast using TimSort), and seeing if it falls between two existing numbers.