以特定数字开始循环排列?

问题描述 投票:0回答:1

抱歉,如果我没说错的话。我有一个获取城市排列的脚本(是的,这些是美国城市的名称!)但是我已经保存了(例如)前 90 个,我试图弄清楚如何在排列编号 91 处启动脚本,所以我不必重新启动该过程。下面是我的脚本。这只是一些城市的示例,实际列表包含更多城市,但我缩短了。

import itertools

x1 = ['Hell', 'Frankenstein', 'Accident', 'Why', 'Okay']
x2 = ['BaldHead', 'Worms', 'SatansKingdom', 'Dinosaur', 'Coward']
x3 =['Dummer', 'DingDong', 'Chugwater', 'BoogerHole', 'Cut&Shoot']

y = itertools.product(x1, x2, x3)

def produce_partially_set(wordlist):
    wordlist.insert(0, 'Boring')
    wordlist.insert(3, 'WhatCheer')
    wordlist.insert(5, 'Zap')
    wordlist.append('Fries')
    return wordlist

for i in y:
    mystring = ' '.join(i)
    splitstrings = mystring.split()
    perms = produce_partially_set(splitstrings)
    seed = ' '.join(perms)
    print(seed)

我希望脚本从第 91 个排列开始,如下所示

#1 = Boring Hell BaldHead WhatCheer Dummer Zap Fries
#91 = Boring Why Dinosaur WhatCheer Dummer Zap Fries

我在更多 itertools 中查找了 nth_permutation 但我被抛弃了,因为我的脚本的设置方式。

python permutation python-itertools
1个回答
0
投票

90 是一个小元素数。除非您在性能关键型代码中重复执行此操作,否则您不应该注意到仅重新生成并忽略前 90 个排列的成本。

您可以使用

itertools.islice
:

方便地跳过迭代器的前 90 个元素
for x in itertools.islice(y, 90, None):
   ...
© www.soinside.com 2019 - 2024. All rights reserved.