切割方法脚本 - TypeError:'generator'类型的对象没有len()

时间:2017-01-30 18:04:58

标签: python python-2.7

我正在尝试在python中执行一个简单的切割方法(Wikipedia)脚本,但是我遇到了一些麻烦。这就是我所拥有的:

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()

我认为它与random.shuffle()返回生成器有关?我似乎无法修复它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

lst = list(yielding(x))
random.shuffle(lst)

另外,请注意,random.shuffle进行就地列表修改。 文档为here