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

但后来我得到错误:TypeError:'zip'类型的对象没有len()

我该怎么办,我很困惑

4

3 回答 3

1

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

于 2013-08-17T00:55:39.320 回答
1

这是 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() 函数

于 2016-11-23T15:04:43.290 回答
0

偶然发现了这一点,并惊讶地发现了 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']
>>> 
于 2014-01-08T22:00:29.717 回答