python列表项组合

python列表项组合,python,list,Python,List,我想对列表中的每一对元素进行比较,但不包括以下内容: 差异=[1,2,3,4,5,6] 没有自我比较 没有反向比较 所以答案是[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

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

  • 没有自我比较
  • 没有反向比较
  • 所以答案是[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;
    

    您应该只使用
    itertools.compositions

    >>> 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)]
    

    您应该只使用
    itertools.compositions

    >>> 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)]
    

    也可以使用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)]
    

    也可以使用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)]
    

    您好,我想知道您是否可以让我了解一下为什么在运行时会出现以下错误:TMP_DIFF=[list(I)for I in list(itertools.compositions(DIFFERENCE2,2));回忆者。起初,我认为可能是len(DIFFERENCE2)=0,1,2是个问题,所以我写了,如果(len(DIFFERENCE2)>2):TMP_DIFF=[list(I)for I in list(itertools.compositions(DIFFERENCE2,2));但这一错误依然存在。请评论。@mparida:
    差异有多大2
    ?如果它的长度超过数万个条目,那么构建每一个可能的组合都会耗尽内存。在这种情况下,考虑在<代码>迭代器中迭代。组合直接输出,这将“懒洋洋地”为您生成组合。感谢NeNeNo的快速回复,我不确定差异有多大,但像您所说的,我假设它是相当大的,以标记这样的错误。我不确定是否理解该情况下的最后一行,考虑直接迭代迭代器组合输出,这将“懒洋洋地”为您生成组合。请解释。感谢您。您好,我想知道您是否可以告诉我为什么在运行时会出现以下错误:TMP_DIFF=[list(I)for I in list(itertools.compositions(DIFFERENCE2,2))];回忆者。起初,我认为可能是len(DIFFERENCE2)=0,1,2是个问题,所以我写了,如果(len(DIFFERENCE2)>2):TMP_DIFF=[list(I)for I in list(itertools.compositions(DIFFERENCE2,2));但这一错误依然存在。请评论。@mparida:
    差异有多大2
    ?如果它的长度超过数万个条目,那么构建每一个可能的组合都会耗尽内存。在这种情况下,考虑在<代码>迭代器中迭代。组合直接输出,这将“懒洋洋地”为您生成组合。感谢NeNeNo的快速回复,我不确定差异有多大,但像您所说的,我假设它是相当大的,以标记这样的错误。我不确定是否理解该情况下的最后一行,考虑直接迭代迭代器组合输出,这将“懒洋洋地”为您生成组合。请解释。谢谢。