找到一个数字是在列表列表中的哪个范围之间

时间:2016-10-17 18:47:03

标签: python

需要一些python帮助,我有一个列表:

[[sql1, 1, 10], [sql2, 12, 16]...]

我想知道15是否在sql2中,请以简单的方式告诉我在python中。

我在循环中尝试过。

3 个答案:

答案 0 :(得分:2)

你将不得不提供一些关于你想要的实现的更多细节,但是如果不回答这太有趣了。

我的回答是:

  1. 您需要以下列表的开头字符串(index == 0)列表:
  2. 第二和第三个元素包含15,范围为a(包括)和b(不包括)
  3. 这是在Python 3中。

    >>> x = [['sql1', 1, 10], ['sql2', 12, 16]]
    >>> [a for a, *b in x if 15 in range(*b)]
    ['sql2']
    

    这也适用于多个匹配:

    >>> x = [['sql1', 1, 10], ['sql2', 12, 16], ['sql3', 15, 17]]
    >>> [a for a, *b in x if 15 in range(*b)]
    ['sql2', 'sql3']
    

    如果您想接受'sql2'15作为输入并返回布尔值:

    >>> x = [['sql1', 1, 10], ['sql2', 12, 16]]
    >>> check = 'sql2'
    >>> n = 15
    >>> any(a == check and n in range(*b) for a, *b in x)
    True
    

答案 1 :(得分:1)

首先,要解决最简单的解决方案,然后考虑制作一些通用的解决方案。

test_data = [['sql', 1, 10],['sql2', 12, 16, 15]]
print(15 in test_data[1]) # True

我们甚至可以将它概括为函数

def in_data(data_sets, data, check_in):
    for data_set in data_sets:
        if data in data_set:
            if check_in in data_set:
                return True
    return False

@Robᵩ指出了一个更优雅/紧凑的解决方案,允许我们写:

def in_data(data_sets, data, check_in):
    return any(check_in in data_set for data_set in data_sets)

答案 2 :(得分:0)

我对数据进行了硬编码以满足问题要求但是 答案可以根据需要修改

my_list = [['sql1', 1, 10], ['sql2', 12, 16]]

for i in range(len(my_list)):
    print(my_list[i])
    if my_list[i][0] == 'sql1':
        if '15' in my_list[i][0]:
            print("found")
        else:
            print("not found")