确定元素是否在列表中的最有效方法

时间:2016-11-21 17:30:20

标签: python

所以我有alist = [2,4,5,6,9,10]b = 6。确定b {/ 1}}中alist是否更有效的方法是什么?

(1)

if b in alist:
      print " b is in alist"

(2)

def split_list(alist,b):
       midpoint = len(alist)/2
       if b<=alist[midpoint]:
          alist =alist[:midpoint]:
          split_list(alist,b)
       else:
          alist=alist[midPoint:]
          split_list(alist,b)

我认为方法编号1更好,因为它只有一行代码,但我读过方法2更好,因为它从列表中间而不是从开头搜索。

2 个答案:

答案 0 :(得分:1)

在python中查找列表中某些内容的预期方法是使用in关键字。如果您有一个非常大的数据集,那么您应该使用专为高效查找而设计的数据结构,例如set。然后,您仍然可以通过in进行查找。

答案 1 :(得分:1)

实际上,您所展示的功能之间的区别在于执行期间的节省时间。如果您确定您的列表总是有超过2个成员,那么功能2会更好但不会太多。

以下是它的工作原理

功能1

    if b in alist:
  print " b is in alist"

这将遍历列表中的所有元素,仅查找b,当它发现它为真时,但如果您的列表有200个成员时间对您的程序变得敏感,该怎么办

功能2

    def split_list(alist,b):
   midpoint = len(alist)/2
   if b<=alist[midpoint]:
      alist =alist[:midpoint]:
      split_list(alist,b)
   else:
      alist=alist[midPoint:]
      split_list(alist,b)

这样做除了现在你首先使用那个中点测试一个条件,以便知道“b”在哪里可以保存循环遍历整个列表的任务,现在你将循环一半的时间,

根据你的情况我的建议是,如果你想使用小清单,你的功能1会更好。但是,如果你想与巨大的名单合作!如果您希望程序具有最佳性能,以下一些功能可以解决您的问题,从而节省大量时间。此函数使用一些内置函数,由于某些列表信息已在内存中,因此需要很短的时间才能完成

    def is_inside(alist,b):
        how_many=alist.count(b) #return the number of times x appears in the list
        if how_many==0:
           return False
        else:
           return True
        #you can also modify the function in case you want to check if an element appears more than once!

但是如果你不想让它说一个元素出现多少次,只有一个满足你的需要!这也是使用列表

的一些内置函数这样做的另一种方式
    def is_inside(alist,b):
        try:
            which_position=alist.index(b) #this methods throws an error if b is not in alist
            return True
        except Error:
            return False

当使用专门用于列表的内置函数时,生活变得简单。你应该考虑阅读如何使用列表,当他们渴望执行程序的东西,如dequeue,stacks,queue,sets
好的来源是文档本身Read here!