python中的最优随机序列排列选择

python中的最优随机序列排列选择,python,random,iterator,permutation,Python,Random,Iterator,Permutation,我正在编写一个Python2.6脚本,从少量的媒体文本中生成诗歌 Atm我对从已知音节长度的字符串池中选择有效音节计数的随机组合来组成半随机行感到困惑。当前功能的灵感来源于此处提出的功率集功能: 举个简单的例子:如果我将两组数据分为5个和10个音节单元,从中组合出20个音节的行,有效的组合将包括:5、5、5、5、10、10、5、10、5、5和10、5、5 由于有大量可能的组合较长的行,两个以上长度的组成单元处理时间变得非常重要,这是我现在主要关心的问题。我可能最终只是限制我的范围,并对一些变量设

我正在编写一个Python2.6脚本,从少量的媒体文本中生成诗歌

Atm我对从已知音节长度的字符串池中选择有效音节计数的随机组合来组成半随机行感到困惑。当前功能的灵感来源于此处提出的功率集功能:

举个简单的例子:如果我将两组数据分为5个和10个音节单元,从中组合出20个音节的行,有效的组合将包括:5、5、5、5、10、10、5、10、5、5和10、5、5

由于有大量可能的组合较长的行,两个以上长度的组成单元处理时间变得非常重要,这是我现在主要关心的问题。我可能最终只是限制我的范围,并对一些变量设置硬上限,以避免更激烈的选择


在我写这篇文章的时候,我突然想到,在这种情况下,坚持现有的算法,缓存/pickle过去的结果,以避免自己不止一次地做这项工作是有意义的,但我并没有真正的计算机科学或数学背景,所以我怀疑我可能忽略了一些显而易见的事情

你有功能吗?有效吗?问题是什么?如果您的_与_替换函数的组合与Python2.7中的类似,那么您只能在10,10和5,5,10之间选择示例数据。还要注意,您应该使用==来比较整数,而不是is。
def valid(self, iterable, target):
    s = list(iterable)
    range_floor = target / max(s)
    range_ceil = target / min(s)
    unfiltered = chain.from_iterable(self.combinations_with_replacement(s, r) for r in range(range_floor, range_ceil))
    return random.choice(list(ifilter(lambda x: sum(x) is target, unfiltered)))