Python 在列表列表中查找数字

Python 在列表列表中查找数字,python,list,Python,List,我有嵌套的数字列表 my_list = [[0,1,2,3,4,5],[6,7,8,9,10,11],[12,56,86,9],[55,53,12]] 我想知道给定数字属于哪个子列表 例如,如果我正在搜索数字1 算法应该返回0,因为1属于第一个子列表 如果我在找9,我应该得到1和2 我看到这里已经有了一个解决方案 但问题是我正在处理大量的列表,循环并不是最好的解决方案 是否有任何内置python函数可以派上用场?您可以使用列表理解,但不确定它是否比循环更好: def search(my_li

我有嵌套的数字列表

my_list = [[0,1,2,3,4,5],[6,7,8,9,10,11],[12,56,86,9],[55,53,12]]
我想知道给定数字属于哪个子列表

例如,如果我正在搜索数字1

算法应该返回0,因为1属于第一个子列表

如果我在找9,我应该得到1和2

我看到这里已经有了一个解决方案

但问题是我正在处理大量的列表,循环并不是最好的解决方案


是否有任何内置python函数可以派上用场?

您可以使用列表理解,但不确定它是否比循环更好:

def search(my_list, n)
  result = [i for i in range(len(my_list)) if n in my_list[i]]
  return result

您可以使用列表理解,如下例所示。对于每个列表,它检查数值是否在列表中。请注意,这仍然使用迭代(以列表理解的形式),但是除非您使用类似的东西(不是内置的),否则您将不得不进行迭代

my_list = [[0,1,2,3,4,5],[6,7,8,9,10,11],[12,56,86,9],[55,53,12]]

def find(my_list, number):
    return [i for i, x in enumerate(my_list) if number in x]

print(find(my_list, 9))
# [1, 2]

优化是一个有趣的话题,根据问题的不同,可以有许多不同的方法

在这种情况下,如果对数据进行了排序,那么您可以开始使用假设,以尽量减少您需要在关键字中使用昂贵的

即,按时间顺序排列每个子列表,并根据第一个元素对这些列表进行排序

所以首先做一个排序函数,它的运行方式是这样的(我将把它留给您)

现在,您可以设计一个更精简的搜索功能

/*
* @pre my_list is sorted
*/
def search(my_list, key):
    result = []
    for index, l in enumerate(my_list): 
        if(l[0] > key):
            break
        if(l[-1] < key):
            continue
        if (key in l):
            result.append(index)
    return result
/*
*@pre my_列表已排序
*/
def搜索(我的_列表,键):
结果=[]
对于索引,枚举中的l(我的列表):
如果(l[0]>键):
打破
如果(l[-1]<键):
持续
如果(输入l):
result.append(索引)
返回结果

<>代码> p>列表不是查找元素的最佳数据结构,应该考虑使用集合,这给了O(1)查找时间。如果您的列表没有交集,那么会有更好的数据结构和算法,但由于您需要所有列表,因此替代方案会更少

lsts = [[0,1,2,3,4,5], [6,7,8,9,10,11], [12,56,86,9], [55,53,12]]
sets = map(set, lsts)

def find(iterables, element):
    return [i for i, iterable in enumerate(iterables) if element in iterable]

使用一个。看看你提供的问题的底部答案。为什么循环不是最好的解决方案?您的数据结构具有哪些属性,可以在不循环的情况下查找元素?您是否会查找多个项(这样,创建
s的前期成本会被
O(1)
成员资格测试的好处所抵消)?
lsts = [[0,1,2,3,4,5], [6,7,8,9,10,11], [12,56,86,9], [55,53,12]]
sets = map(set, lsts)

def find(iterables, element):
    return [i for i, iterable in enumerate(iterables) if element in iterable]