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']
>>>