Python中使用random.shuffle洗牌后如何记录所有不同排列?
问题原因
因为cards是可变列表对象,你每次调用random.shuffle(cards)都是直接修改这个列表本身,而Shuffles.append(cards)添加的是这个列表的引用,不是新的列表。所以最终Shuffles里的所有元素其实都指向同一个cards列表,显示的自然就是最后一次洗牌后的结果。
解决方法
方法一:添加列表的副本到Shuffles
每次洗牌后,添加cards的副本而不是原列表的引用,这样每个副本都是独立的新列表,不会被后续的shuffle修改。可以用list(cards)或者cards.copy()来创建副本:
import random cards = ["Jack", "Queen", "King"] Shuffles = [] for i in range(4): random.shuffle(cards) Shuffles.append(list(cards)) # 或者 cards.copy() print(Shuffles)
方法二:每次循环重新初始化cards列表
如果不想用副本,也可以在每次循环开始时重新创建cards列表,这样每次shuffle的都是新的列表对象,添加到Shuffles里的自然是独立的:
import random Shuffles = [] for i in range(4): cards = ["Jack", "Queen", "King"] # 每次循环重新创建列表 random.shuffle(cards) Shuffles.append(cards) print(Shuffles)
内容的提问来源于stack exchange,提问作者Brown Bakani
相关产品推荐
相关产品推荐

