【问题标题】:Python Nested Loop unique pairsPython 嵌套循环唯一对
【发布时间】:2015-03-29 08:01:33
【问题描述】:

我正在尝试编写一个嵌套循环,以打印出某个范围内所有可能的“唯一对”数字。例如,如果范围是 1 到 3,则唯一对将是:

(1,2) (1,3) (2,3)

如果范围是 1 到 4,则唯一对将是:

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

这是我从 1 到 3 的做法:

for i in range(1,4):
    for j in range(2,4):
        if (i != j & j != (i-1)):
            print (i,j)

打印出 (1, 2), (1, 3),(2, 3)。但这是一个 hack,因为当我将范围更改为 1,5 时它不起作用。它打印出重复的对,例如 (1,5) 和 (5,1)。

【问题讨论】:

    标签: python nested-loops


    【解决方案1】:

    使用itertools.combinations():

    >>> import itertools
    >>> print list(itertools.combinations(range(1, 5), r=2))
    [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
    

    只要你的输入是唯一的,就不会有重复的组合:

    itertools.combinations(iterable, r)

    从输入 iterable 返回 r 元素的长度子序列。

    组合按字典排序顺序发出。因此,如果输入的可迭代对象已排序,则组合元组将按排序顺序生成。

    元素根据它们的位置而不是它们的位置被视为唯一的 价值。所以如果输入元素是唯一的,就不会有重复 每个组合中的值

    【讨论】:

      【解决方案2】:
      for i in range(1,4):
          for j in range(i+1,4):  # <-- the key is to make j start at i+1
              print (i,j)
      

      【讨论】:

        【解决方案3】:

        您可能正在寻找这样的东西:

        n = 4
        x = [(i,j) for i in range(1,n+1) for j in range(i+1, n+1)]
        print x
        

        干杯, 亚历克斯

        【讨论】:

        • 为什么是n+1n+1 不是只有 5 个吗?也许我在这里误解了什么?
        • 你需要 n+1 因为范围 (i, j) 从 i 到 j - 1。所以如果我们使用 (1, n) 我们将有 1 到 n - 1。所以如果 n 是4,那么我们将缺少 4,我们将只有 1、2 和 3。
        • @AlexandruGodri 我想他是在问为什么不用 5 替换所有 n+1
        • 因为我写它是为了通用目的。您只需将“n”更改为任何内容,代码就可以工作:)
        【解决方案4】:

        你可以使用itertools.combinations:

        >>> from itertools import combinations
        >>> print list(combinations(range(1,4), 2))
        [(1, 2), (1, 3), (2, 3)]
        

        Python 2 Documentation

        Python 3 Documentation

        【讨论】:

          【解决方案5】:

          参见itertools 模块。

          也许你想要的是

          list(itertools.combinations(range(1,4),2)) == [(1, 2), (1, 3), (2, 3)]
          

          【讨论】:

            猜你喜欢
            • 2018-09-04
            • 2010-12-21
            • 2017-04-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-30
            • 2012-06-27
            • 1970-01-01
            相关资源
            最近更新 更多