首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用迭代器Python管理上的计算

使用迭代器Python管理上的计算
EN

Stack Overflow用户
提问于 2013-08-02 07:42:12
回答 1查看 31关注 0票数 2

我试图用一种更简单的方式来做这个非常简单的事情,只需要一个迭代器:

代码语言:javascript
复制
>>>for i in xrange(10):
...    for j in xrange(i+1,10):
...        print i,j
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 3
2 4
2 5
2 6
2 7
2 8
2 9
3 4
3 5
3 6
3 7
3 8
3 9
4 5
4 6
4 7
4 8
4 9
5 6
5 7
5 8
5 9
6 7
6 8
6 9
7 8
7 9
8 9

我想做的是这样的事情,它只需要一个迭代器:

代码语言:javascript
复制
>>>from itertools import tee
>>>iter1=iter(xrange(10))
>>>for i in iter1:
...    iter2=tee(iter1,1)[0]
...    for j in iter2:
...        print i,j

这显然不起作用,产生了以下结果:

代码语言:javascript
复制
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8 
0 9

自从我一直通过iter2迭代之后,我也一直在通过iter1进行迭代。

我有办法做到这一点吗?我在使用Python-2.7

编辑:对于任何可迭代的事物,我想做的都是一样的,而不仅仅是数字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-02 07:45:15

使用itertools.combinations

代码语言:javascript
复制
import itertools
for i, j in itertools.combinations(range(10), 2):
    print i, j

编辑 correnspond来编辑问题

itertools.combinations接受可迭代。例如,

代码语言:javascript
复制
>>> import itertools
>>> 
>>> def gen():
...     yield 'egg'
...     yield 'spam'
...     yield 'ham'
... 
>>> for i, j in itertools.combinations(gen(), 2):
...     print i, j
... 
egg spam
egg ham
spam ham
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18011420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档