Python Cut-up方法脚本-TypeError:类型为';发电机&x27;没有len()

Python Cut-up方法脚本-TypeError:类型为';发电机&x27;没有len(),python,python-2.7,Python,Python 2.7,我试图用python编写一个简单的分解方法脚本,但遇到了一些麻烦。以下是我得到的: import random def splitter(string, num): pieces = string.split() for i in xrange(0, len(pieces), num): yield' '.join(pieces[i:i+num]) def cutup(what, order): mixed = list(random.shuffle

我试图用python编写一个简单的分解方法脚本,但遇到了一些麻烦。以下是我得到的:

import random

def splitter(string, num):
    pieces = string.split()

    for i in xrange(0, len(pieces), num):
        yield' '.join(pieces[i:i+num])

def cutup(what, order):
    mixed = list(random.shuffle(splitter(what, order)))
    for piece in mixed:
        print piece + " "

cutup(range(1,100), 3)
我们的想法是将输入分割成
num
——将长的词块,洗牌这些词块,将它们拼接在一起,然后再吐出来。但我一直在犯这样的错误:

Traceback (most recent call last):
  File "cutup.py", line 15, in <module>
    cutup(range(1,100), 3)
  File "cutup.py", line 11, in cutup
    mixed = list(random.shuffle(splitter(what, order)))
  File "/usr/lib/python2.7/random.py", line 288, in shuffle
    for i in reversed(xrange(1, len(x))):
TypeError: object of type 'generator' has no len()
回溯(最近一次呼叫最后一次):
文件“cutup.py”,第15行,在
切割(范围(1100),3)
文件“cutup.py”,第11行,在cutup中
mixed=list(random.shuffle(拆分器(what,order)))
文件“/usr/lib/python2.7/random.py”,第288行,无序排列
对于反向中的i(x范围(1,len(x)):
TypeError:类型为“generator”的对象没有len()
我认为这与
random.shuffle()
返回生成器有关?我似乎无法修复它。有什么想法吗?

随机。shuffle()需要知道输入的长度(并尝试获取对象的长度)。生成器无法提供此功能,您必须将其具体化为一个列表:

lst = list(yielding(x))
random.shuffle(lst)
另外,请注意,
random.shuffle
对就地列表进行修改。
文档是。

我决定避开所有这些令人困惑的生成器内容,使用O(NlogN)选项:组装
排序(splitter(what,order),key=lambda k:random.random())
。是否有一个带有
random
(如
random.sample()
)的O(N)选项可以使用?我只是担心它会重复…这个答案确实给了你一个o(n)选项。哦,我今天看起来很傻