我正在尝试运行以下代码,但是出现了错误。使用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'
有谁知道如何解决这个问题?
答案 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