Skip to main content
 首页 » 编程设计

python之复制迭代器和生成组合

2025年05月04日16wayfarer

假设我有一个列表,我想在不考虑顺序的情况下生成所有唯一元素对的列表。一种方法是:

mylist = ['W','X','Y','Z'] 
for i in xrange(len(mylist)): 
    for j in xrange(i+1,len(mylist)): 
        print mylist[i],mylist[j] 
W X 
W Y 
W Z 
X Y 
X Z 
Y Z 

我想用迭代器做到这一点,我想到了以下内容,尽管它并不简洁:

import copy 
it1 = iter(mylist) 
for a in it1: 
    it2 = copy.copy(it1) 
    for b in it2: 
        print a,b 

但这根本行不通。使用迭代器或 zip 等,执行此操作的更 pythonic 和更有效的方法是什么?

请您参考如下方法:

这已经完成并包含在 Python 2.6 的标准库中:

import itertools 
 
mylist = ['W', 'X', 'Y', 'Z'] 
for pair in itertools.combinations(mylist, 2): 
    print pair        # pair is a tuple of 2 elements 

对我来说看起来很 Pythonic ;-)

请注意,即使您正在计算大量组合,combinations() 函数也会返回一个迭代器,以便您可以立即开始打印它们。查看docs .

此外,您将结果称为列表与其自身之间的笛卡尔积,但这并不完全正确:笛卡尔积将包含 16 个元素 (4x4)。您的输出是其中的一个子集,即只有 2 元素 combinations (不允许重复)列表的值。