【问题标题】:improve efficiency of a nested loop提高嵌套循环的效率
【发布时间】:2022-01-15 15:52:38
【问题描述】:

我需要在列表中找到具有连续数字的对数。如果列表中的元素重复,则应将它们视为不同对的成员。例如,如果列表是 [1, 1, 1, 2, 2, 5, 8, 8],那么选择 1 的方式有 3 种,选择 2 的方式有两种,或者总共 3×2=63× 2=6 种方法来选择对 (1, 2),因此在这种情况下,答案将是 6。

我的解决方案目前包含一个嵌套循环,如下所示。该代码有效,但我想优化不到 2 秒的运行时间。

谁能给我一些关于如何改进这个解决方案的运行时间的建议?

L = [1, 2, 5, 8]
count = 0
for i in range(0,len(L)-1):
        for x in range(i+1, len(L)):
            if L[x] == L[i] + 1 or L[x] == L[i] -1 : 
                count+=1

【问题讨论】:

  • 您能否提供更多详细信息/示例?我无法理解您希望实现的确切目标。您是否只想计算所有项目的组合(包括配对 1,2 的 6 个)还是只想要特定的配对?

标签: python for-loop nested-loops coding-efficiency


【解决方案1】:

您可以使用集合中的 Counter 类对可用数字进行分类和计数,然后将现有连续值对的计数乘积相加:

from collections import Counter

L = [1, 1, 1, 2, 2, 5, 8, 8]

counts = Counter(L)
r = sum(c*counts[n+1] for n,c in counts.items())

print(r) # 6

【讨论】:

  • 这太完美了!!这个逻辑非常简洁!
猜你喜欢
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2015-10-08
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
相关资源
最近更新 更多