继续(或开始)itertools.排列从一个特定的地方?

2024-09-28 01:32:03 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我运行以下脚本

try:
    while 1:
        # Iteration processess of possibel keys
        for length in range(7,8): # only do length of 7
            for attempt in itertools.permutations(chars, length):
                print(''.join(attempt))

except keyboardInterrupt:
    print "Keybord interrupt, exiting gracefully anyway."
    sys.exit()

它将开始打印

^{pr2}$

但是假设我退出/关闭脚本,迭代在ABCDEFJ处停止。在

是否可以从那个位置(ABCDEFJ)开始,这样我就不必迭代以前迭代过的(ABCDEFG, ABCDEFH, ABCDEFI

问题:

如何选择itertools.permutations的起点?在


Tags: ofin脚本forlengthprintitertoolstry
2条回答

如果不退出脚本,您可以简单地保留迭代器并在以后继续使用它。由于重新开始,迭代器将在从头开始的状态下创建。itertools.permutations没有用于中间启动的特殊API,而且生成器通常也没有这个特性,因为它们具有在迭代时演化的内部状态。因此,在新的生成器中间启动的唯一方法是消耗给定数量的元素并将其丢弃。在

不能。没有API支持它,并且无法序列化这些对象:

i=itertools.permutations('ABC', 2)
next(i) # ('A', 'B')
next(i) # ('A', 'C')

import pickle
with open('mypickle', 'w') as f:
    pickle.dump(i, f)

  ...
  File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex
    raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle permutations objects

您有两种选择:

  • 跳过您已经看到的排列(如您所建议的)或
  • 编写你自己的函数,接受一个起点。在

相关问题 更多 >

    热门问题