【问题标题】:TypeError: 'range' object does not support item assignmentTypeError:“范围”对象不支持项目分配
【发布时间】:2013-12-10 01:13:04
【问题描述】:

我正在查看一些 python 2.x 代码并试图将其转换为 py 3.x 但我被困在这一部分。谁能澄清什么是错的?

import random

emails = {
    "x": "[REDACTED]@hotmail.com",
    "x2": "[REDACTED]@hotmail.com",
    "x3": "[REDACTED]@hotmail.com"
}

people = emails.keys()

#generate a number for everyone
allocations = range(len(people))
random.shuffle(allocations)

这是给出的错误:

TypeError: 'range' object does not support item assignment

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    在 Python 3 中,range 返回一个惰性序列对象 - 它不返回一个列表。无法重新排列范围对象中的元素,因此无法对其进行混洗。

    在洗牌之前将其转换为列表。

    allocations = list(range(len(people)))
    

    【讨论】:

    • 你碰巧知道python3的xrange等价物吗?
    • Python3 的 range 与 python2 的 xrange 相同。旧的range 已不复存在。
    • 它返回一个序列类型的范围对象
    【解决方案2】:

    如果您可以使用 numpy 库,您可以将 range 替换为 np.arange

    import numpy as np
    allocations = np.arange(len(people))
    

    【讨论】:

    • 为此导入numpy 有点过头了,因为它可以通过使用list() 在本地完成。
    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 2014-02-18
    • 2017-03-26
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    相关资源
    最近更新 更多