在 python 中压缩的 LEN 错误


def shufflemode():
    import random
    combined = zip(question, answer)
    random.shuffle(combined)
    question[:], answer[:] = zip(*combined)

但是后来我得到错误: 类型错误:类型为"zip"的对象没有len((

我该怎么办我这么困惑

我想知道同样的事情。根据:随机化两个列表并保持 Python 中的顺序您应该能够像尝试的OP一样做到这一点,但是我也遇到了相同的错误。我认为链接中的那些使用的是python 2而不是3,这可能是问题所在吗?

这是 Python 2 和 Python 3 之间的问题。在 Python 2 中使用 zip 后使用 shuffle 工作,因为 zip 返回一个列表。在 Python 3 中:"TypeError:类型为 'zip' 的对象没有 len((",因为 zip 在 Python 3 中返回了一个迭代器。

解决方案,使用 list(( 转换为列表:

combined = list(zip(question, answer))
random.shuffle(combined)

错误出现在 shuffle(( 中,因为 shuffle(( 使用 len((。

参考资料问题:python 3 中的 zip(( 函数

偶然

发现了这一点,并惊讶地了解到random.shuffle方法。所以我尝试了你的例子,它在 Python 2.7.5 中对我有用:

def shufflemode():
    import random
    combined = zip(question, answer)
    random.shuffle(combined)
    question[:], answer[:] = zip(*combined)
question = ["q1","q2","q3","q4","q5"]
answer = ["a1","a2","a3","a4","a5"]
if __name__ == "__main__":
    shufflemode()
    print question,answer

结果是两个列表,具有相同的随机问题和答案序列*强文本*:

>>> 
['q3', 'q2', 'q5', 'q4', 'q1'] ['a3', 'a2', 'a5', 'a4', 'a1']
>>> 

最新更新