hig*_*dth 1 python iterator list cartesian-product
假设我有一个列表,我想生成所有唯一元素对的列表,而不考虑订单.一种方法是:
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
Run Code Online (Sandbox Code Playgroud)
我想用迭代器做这个,我想到了以下内容,即使它没有简洁:
import copy
it1 = iter(mylist)
for a in it1:
it2 = copy.copy(it1)
for b in it2:
print a,b
Run Code Online (Sandbox Code Playgroud)
但这甚至都行不通.什么是更加pythonic和有效的方式,使用迭代器或zip等?
这已经完成,并且从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
Run Code Online (Sandbox Code Playgroud)
对我来说好像Pythonic ;-)
请注意,即使您计算了很多组合,该combinations()函数也会返回一个迭代器,以便您可以立即开始打印它们.查看文档.
此外,您将结果称为列表与其自身之间的笛卡尔积,但这并非严格正确:笛卡尔积将具有16个元素(4x4).您的输出是其中的一个子集,即仅列出值的2元素组合(不允许重复).
| 归档时间: |
|
| 查看次数: |
668 次 |
| 最近记录: |