use*_*514 8 python python-itertools chain
import itertools
def _yield_sample():
it = iter(itertools.combinations('ABCD', 2))
it2 = iter(itertools.combinations('EFGH', 3))
itc = itertools.chain(it,it2)
for x in itc:
yield x
def main():
for x in _yield_sample():
print x
Run Code Online (Sandbox Code Playgroud)
这适用于打印组合.
>>>
('A', 'B')
('A', 'C')
('A', 'D')
...
Run Code Online (Sandbox Code Playgroud)
但是这个:
def __position_combination(_count = [2,3,4,5]):
its = []
for ct in _count:
it = iter(itertools.combinations('ABCDEFG', ct))
its.append(it)
itc = itertools.chain(its)
for x in itc:
yield x
def main():
for x in __position_combination():
print x
Run Code Online (Sandbox Code Playgroud)
不会,它会打印出来
>>>
<itertools.combinations object at 0x02179210>
<itertools.combinations object at 0x02179240>
<itertools.combinations object at 0x02179270>
Run Code Online (Sandbox Code Playgroud)
我必须重写代码以使其按要求工作.
itc = itertools.chain(*its)
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
itertools.chain(iter, iter, iter) vs itertools.chain(*[iter,iter,iter])
Run Code Online (Sandbox Code Playgroud)
他们之间有什么不同?根据文档
的itertools.chain作用:
def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element
Run Code Online (Sandbox Code Playgroud)
那么,为什么itertools.chain(iter, iter, iter)这里也有效呢?
这意味着iter, iter, iter = *(iter, iter, iter)什么?
| 归档时间: |
|
| 查看次数: |
11462 次 |
| 最近记录: |