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]