【问题标题】:python list item combinationspython列表项组合
【发布时间】:2014-05-23 05:25:45
【问题描述】:

我想在列表中的每一对元素之间进行比较,但不包含以下内容: 差异=[1,2,3,4,5,6]

  1. 没有自我比较
  2. 没有反向比较

所以答案将是 [1,2],[1,3],[1,4],[1,5],[1,6],[2,3],[4,5], [5,6],[3,4],[2,4],[2,5],[3,6],[2,6],[3,5],[4,6] 到目前为止我已经写了这个,但我正在寻找一种更快的方法。

for i in DIFFERENCE:
       for j in DIFFERENCE:
           if(some condition and i!=j and i+'_'+j not in COMPARISON and j+'_'+i not in COMPARISON):
               COMPARISON.append(i+'_'+j);
               COMPARISON.append(j+'_'+i);
               ANS_COUNT=ANS_COUNT+1;

【问题讨论】:

    标签: python list


    【解决方案1】:

    你也可以使用 for 循环来做到这一点:

    l = list()
    for i in range (1,7):
        for j in range (2,7):
            if(i == j):
                j = j + 1
            elif ((i,j) in l or (j,i) in l):
                continue
            else:
                l.append((i,j))
    
    print l
    

    输出:

    [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)]
    

    【讨论】:

      【解决方案2】:

      你应该只使用itertools.combinations:

      >>> import itertools
      >>> list(itertools.combinations([1,2,3,4,5,6], 2))
      [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5), (4, 6), (5, 6)]
      

      【讨论】:

      • 您好,我想知道您能否给我一些见解,了解为什么我在运行时会出现以下错误: TMP_DIFF=[list(i) for i in list(itertools.combinations(DIFFERENCE2, 2 ))];内存错误。起初,我认为可能是 len(DIFFERENCE2) =0,1,2 是个问题,所以我写了,if(len(DIFFERENCE2)>2):TMP_DIFF=[list(i) for i in list(itertools.combinations(DIFFERENCE2) , 2))];但是这个错误仍然存​​在。请发表评论。
      • @mparida:DIFFERENCE2 有多大?如果它的长度超过几万个条目,那么构建每个可能的组合的内存就会用完。在这种情况下,请考虑直接迭代 itertools.combinations 输出,这将“懒惰地”为您生成组合。
      • 感谢您的快速回复 nneonneo 我不确定 DIFFERENCE2 有多大,但就像您说的那样,我假设标记此类错误非常大。我不确定我是否理解最后一行在这种情况下,请考虑直接迭代 itertools.combinations 输出,这将“懒惰地”为您生成组合......请解释。欣赏它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多