def shufflemode():
import random
combined = zip(question, answer)
random.shuffle(combined)
question[:], answer[:] = zip(*combined)
但后来我得到错误:TypeError:'zip'类型的对象没有len()
我该怎么办,我很困惑
def shufflemode():
import random
combined = zip(question, answer)
random.shuffle(combined)
question[:], answer[:] = zip(*combined)
但后来我得到错误:TypeError:'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']
>>>