【问题标题】:For loop to compare one element with all the remaining elements of an arrayFor循环将一个元素与数组的所有剩余元素进行比较
【发布时间】:2016-01-02 11:42:49
【问题描述】:

我在 Python [0,1,2,3,4] 中有一个包含 5 个元素的数组。我想以下列方式比较元素。

(0,1),(0,2),(0,3),(0,4),(1,2),(1,3),(1,4),(2,3),(2,4),(3,4),(4,4)

我正在做的事情如下。

for i in range(len(array)):
   for j in range(i+1,len(array)):

但这是按照以下方式进行比较。

(0,1),(1,2),(2,3),(3,4)... 

我哪里做错了?

【问题讨论】:

  • 你想要结果,还是你自己写?
  • @TigerhawkT3 如果我想以上述方式比较元素,我需要逻辑。
  • 在这些循环之后有一行print(array[i], array[j]),我得到了所需的输出((4, 4) 除外,它实际上不是组合序列的一部分)。
  • 您的嵌套 for 循环看起来是正确的,所以如果它们没有为您提供您期望的元素对,那么您的代码肯定有其他问题。尝试创建一个 minimal reproducible example 来说明这个问题。
  • 为什么在预期输出的末尾有(4,4)

标签: python arrays for-loop


【解决方案1】:

此代码产生所需的结果:

array = [0,1,2,3,4]
for i in range(len(array)):
    for j in range(i+1,len(array)):
        print(array[i], array[j])
print(array[-1], array[-1])

此代码是您可能得到错误结果的一种方式:

for i in range(len(array)):
    for j in range(i+1,len(array)):
        print(array[i], array[j])
        break

【讨论】:

  • 为什么会有break 呢?任何事情都有可能,但你的猜测是基于什么?
  • @TigerhawkT3:这是一个产生报告结果的简单更改。这只是一个猜测,但这是我能想到的唯一方法,而且不会让事情变得更复杂。
【解决方案2】:

使用 itertools 是另一种选择:

>>> [x for x in itertools.combinations(xrange(5), 2)]
[(0, 1), (0, 2), (0, 3), (0, 4), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

【讨论】:

  • 你有解释为什么 OP 的代码不适合他们吗?
  • @TigerhawkT3,不,因为他的代码不完整(for 循环看起来不错),还将每个元素与自己进行比较(我的意思是 (4,4))是一件愚蠢的事情,因为你知道这将永远是真的,或者他们将永远在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多