python - 如何查找列表中的数字是否在列表中两个数字的区间内?

标签 python list

我有两个相同长度的排序列表,例如:

first_list = [3, 5, 15, 19, 23]
second_list = [0, 11, 22, 34, 43]

我想知道第一个列表中的数字是否在第二个列表中连续两个数字形成的区间内。然后,我想打印第一个列表的值和间隔。

举个例子:

3 in range(0,11) # True
5 in range(0,11) # True
15 in range(0,11) # False, next
15 in range(11,22) # True

等等。

first_list = [3, 5, 15, 19, 23]
second_list = [0, 11, 22, 34, 43]

aux = 0
count = 1
n_iterations = len(first_list)
iteration = 0
while iteration != n_iterations:
    iteration += 1
    for i in first_list: 
        counter = first_list.index(i)
        try:        
            interval = range(second_list[aux],second_list[count])        
            if i in interval:
                print(i, 'in', interval)
            if i not in interval:    
                aux += 1
                count += 1    
                interval = range(second_list[aux], second_list[count])            
                if i in interval:
                    print(i, 'in' ,interval)
        except IndexError:
            break

我试过的代码确实有效。但它似乎效率低下且“难以阅读”,所以必须有另一种方法来做到这一点。

最佳答案

编辑:由于问题已更新,我稍微更新了我的答案。我高兴地承认这个解决方案不是最优的,并且比 user7440787 的解决方案花费更多的时间。我更关注问题的“难以阅读”部分而不是“低效”部分。


首先是我的回答,然后是一些解释。

first_list = [3, 5, 15, 19, 23]
second_list = [0, 11, 22, 34, 43]

for low,high in zip(second_list, second_list[1:]):
    for val in first_list:
        if low <= val <= high:
            print("{} is in {}".format(val, (low, high)))

输出:

3 is in (0, 11)
5 is in (0, 11)
15 is in (11, 22)
19 is in (11, 22)
23 is in (22, 34)

这给了你简单的优雅,同时仍然是可读的。将所有内容都集中在一行中总是一个有趣的挑战,但是当您将代码分成重要的部分时,代码会更容易处理。当然,您可以通过其他方式完成此操作,但这展示了 Python 的许多优点。

zip(second_list, second_list[1:])遍历 second_list 中的对列表。 [1:]将列表切片为除第一个元素以外的所有元素,而 zip获取列表的两个 View 并为每一对生成一个元组,然后将其分配给低和高。

low <= val <= high在 C、C++ 或 C# 中是逻辑错误,但在 Python 中是完全正确的。它被定义为“low <= val and val <= high”,这正是您在这种情况下要查找的内容。

使用 str.format 是一种在 python 中输出所有类型变量的简单方法。

关于python - 如何查找列表中的数字是否在列表中两个数字的区间内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57383420/

相关文章:

python - OpenCV 中的相机分辨率不准确

python - 如何对二维列表进行编号?

python - 需要 : simple way to force json to decode to "normal" iterable python lists

python - 如何使用 'm/d/yy' 格式修剪时间戳中的空格

python - Pandas 使用单元格值作为字典键返回字典值

python - 用 Pandas 阅读excel专栏

python - pip3 的 PermissionError

java - 连接字符串对象列表的最佳方法?

list - Ansible 将列表项连接到字符串中,包括引号

python - 将字符串转换为包含负数的整数列表