2024-10-04 03:22:41 发布
网友
我有一个元组和一个随机字符串:
AllSands = "GREEN", "RED", "PINK", "BLACK", "WHITE", "ORANGE", "PURPLE", "BROWN", "GREY" found_sand = random.choice(AllSands)
但之后,我想从元组中取出随机字符串,这样就可以再次运行随机部分,而不必使用相同的颜色。你知道吗
我只需要做一个列表AllSands然后shuffle就可以了
AllSands
shuffle
>>> AllSands = ["GREEN", "RED", "PINK", "BLACK", "WHITE", "ORANGE", "PURPLE", "BROWN", "GREY"] >>> import random >>> random.shuffle(AllSands) >>> AllSands ['BROWN', 'WHITE', 'ORANGE', 'GREY', 'PINK', 'PURPLE', 'GREEN', 'BLACK', 'RED']
如果您知道不需要整个列表,那么可以使用sampleintead
sample
>>> random.sample(AllSands, 3) ['PINK', 'BROWN', 'ORANGE']
这些方法比一次选择一个随机项然后从列表/元组中删除它更有效
您还可以有一个返回迭代器的函数,如下所示
>>> def shuffler(items): ... items = list(items) ... random.shuffle(items) ... return iter(items) ... >>> sands = shuffler(AllSands) >>> next(sands) 'RED' >>> next(sands) 'PURPLE' >>> next(sands) 'WHITE' >>> next(sands) 'GREEN'
不能对tuple进行变异,只能创建新的tuple。如果使用list,则更容易做到:
tuple
list
AllSands = ["GREEN", "RED", "PINK", "BLACK", "WHITE", "ORANGE", "PURPLE", "BROWN", "GREY"] found_sand = random.choice(AllSands) AllSands.remove(found_sand)
当然,更简单的方法是根据需要洗牌和pop,这样就消除了O(n)搜索和复制remove的工作:
pop
O(n)
remove
AllSands = ["GREEN", "RED", "PINK", "BLACK", "WHITE", "ORANGE", "PURPLE", "BROWN", "GREY"] random.shuffle(AllSands) found_sand = AllSands.pop() # Each time you call pop, you "find" a new value
元组是不可变的,所以它们不能被删除。可以使用较少的元素创建一个新的。你知道吗
>>> AllSands = "GREEN", "RED", "PINK", "BLACK", "WHITE", "ORANGE", "PURPLE", "BROWN", "GREY" >>> AllSands = AllSands[1:] >>> AllSands ('RED', 'PINK', 'BLACK', 'WHITE', 'ORANGE', 'PURPLE', 'BROWN', 'GREY')
但是,您可能只想在无序元组上迭代:
AllSands = "GREEN", "RED", "PINK", "BLACK", "WHITE", "ORANGE", "PURPLE", "BROWN", "GREY" >>> all_ = list(AllSands) >>> random.shuffle(all_) >>> all_ ['WHITE', 'BLACK', 'PURPLE', 'RED', 'PINK', 'ORANGE', 'GREY', 'GREEN', 'BROWN'] >>> random.shuffle(all_) >>> all_ ['GREEN', 'BLACK', 'PURPLE', 'GREY', 'PINK', 'BROWN', 'RED', 'WHITE', 'ORANGE']
我只需要做一个列表
AllSands
然后shuffle
就可以了如果您知道不需要整个列表,那么可以使用
sample
intead这些方法比一次选择一个随机项然后从列表/元组中删除它更有效
您还可以有一个返回迭代器的函数,如下所示
不能对
tuple
进行变异,只能创建新的tuple
。如果使用list
,则更容易做到:当然,更简单的方法是根据需要洗牌和
pop
,这样就消除了O(n)
搜索和复制remove
的工作:元组是不可变的,所以它们不能被删除。可以使用较少的元素创建一个新的。你知道吗
但是,您可能只想在无序元组上迭代:
相关问题 更多 >
编程相关推荐