【问题标题】:Is there a time complexity difference between these two methods of list traversal?这两种遍历列表的方法在时间复杂度上有区别吗?
【发布时间】:2016-06-03 07:13:48
【问题描述】:

时间复杂度有区别吗?或者他们是一样的?我很难说(python 3.5)

list_of_dict = [{'name':'alan', 'age':5}, {'name':'alice', 'age':6}]

# first method
names = []
ages  = []
for i in range(len(list_of_dict)):
    names.append(list_of_dict[i]['name'])
    ages.append(list_of_dict[i]['age'])

# second method

names = [x['name'] for x in list_of_dict]
ages  = [x['age'] for x in list_of_dict]

对于这个问题可能微不足道,我提前道歉。我是一名学生,在我继续学习的过程中,我们非常感谢您的洞察力。

【问题讨论】:

    标签: python algorithm time-complexity


    【解决方案1】:

    就渐近时间复杂度而言,它们是相同的。

    对于列表中的每个元素,这两种方法都需要恒定的字典访问(平均是恒定的时间),因此两者都需要O(n)

    如果您关心常量,则很难说清楚,并且可能因不同的解释器而异,这可能会优化不同的东西。

    【讨论】:

    • 如果我可以问,你怎么知道它们是一样的?我无法正式解释原因。但似乎第二个“更长”,因为它遍历列表两次
    • @Alan 就渐近时间复杂度而言,O(n) = O(2*n).
    【解决方案2】:

    除了理论上的复杂性,您可以根据需要对它们进行计时或使用ipython 使用%timeit 进行计时

    第一种方法:10 loops, best of 3: 58.2 ms per loop

    第二种方法:10 loops, best of 3: 56.3 ms per loop

    它们非常接近,需要用更大的数据集进行检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多