请求+:'range'和'list'不支持的操作数类型

时间:2017-11-24 11:48:54

标签: python python-3.x range shuffle

我正在尝试运行以下代码,但是出现了错误。使用Spyder为Python3运行以下代码。

def create_batches(data_size, batch_size, shuffle=True):
    """create index by batches."""
    batches = []
    ids = range(data_size)
    if shuffle:
        random.shuffle(ids)
    for i in range(data_size // batch_size):
        start = i * batch_size
        end = (i + 1) * batch_size
        batches.append(ids[start:end])
    # the batch of which the length is less than batch_size
    rest = data_size % batch_size
    if rest > 0:
         batches.append(ids[-rest:] + [-1] * (batch_size - rest))  # -1 as padding
    return batches

错误是:

TypeError: unsupported operand type(s) for +: 'range' and 'list'

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

random.shuffle()仅适用于可变序列,它通常是list个对象。 range()生成不可变序列对象,random.shuffle()无法移动范围内的值。

首先将范围转换为列表:

ids = list(range(data_size))

在Python 2中,range()用于生成整数列表(与xrange()相对,生成不可变序列),因此您仍然可以在线查找使用range()而不使用list()的代码在洗牌之前{1}}在尝试将在线代码示例调整为Python 3时,请考虑这一点。另请参阅NameError: global name 'xrange' is not defined in Python 3