在列表中生成随机项目

问题描述:

如何调整此功能,如果它运行多次,它不会返回以前的方向?例如,如果它生成N,则下一次不会返回N在列表中生成随机项目

import random 
def random_direct(): 
    directions=['N','S','E','W'] 
    return random.choice(directions) 

谢谢你的时间!

此问题要求返回随机项目不打印它。

+3

可能的重复http://stackoverflow.com/questions/29805042/python-avoid-previous-value-from-random-selection-from-list –

+0

可能的重复[Python |避免从列表中随机选择以前的值](http://stackoverflow.com/questions/29805042/python-avoid-previous-value-from-random-selection-from-list) –

import random 

def random_direct(prev_direction=None): 
    directions = [direction for direction in ('N','S','E','W') 
          if direction != prev_direction] 
    return random.choice(directions) 
+0

感谢ans – James

+3

'random.choice '不适用于发电机,发电机没有长度。你应该使用列表来代替。 (现在答案已修复) – avysk

+1

啊,我的不好。经典“过早优化是万恶之源”。谢谢@avysk! –

如果您可以通过以前的方向,如在另一个答案,这是最好的。如果你不能,你可以做一些两轮牛车(我做推荐的):

def random_direct(_prev = [None]): 
    directions = [direction for direction in ('N', 'S', 'E', 'W') 
          if direction != _prev[0]] 
    res = random.choice(directions) 
    _prev[0] = res 
    return res 

调用不带任何参数的功能,如random_direct()