使用列表理解交换列表中随机元素的范围

Oni*_*lol 0 python list-comprehension python-2.7

我必须随机从列表中选择N个元素,从列表中删除它们并将它们添加到另一个元素中.到目前为止我的方法是这样的:

import random

x = ['a','b','c','d','e','f','g']
y = []
for v in reversed(list(x)):
  z = x.pop(x.index(random.choice(x)))
  y.append(z)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

['a', 'b', 'c', 'd', 'e', 'f', 'g']
['a', 'b', 'c', 'd', 'f', 'g']
['a', 'b', 'c', 'd', 'g']
['b', 'c', 'd', 'g']
['b', 'c', 'g']
['c', 'g']
['g']
['e', 'f', 'a', 'd', 'b', 'c', 'g']
Run Code Online (Sandbox Code Playgroud)

有没有办法用列表推导来写这个?这超出了我的理解范围.

原始列表没有结束洗牌,它只删除了选择的元素.

dan*_*dee 5

此功能已内置于随机模块中

>>> x = ['a','b','c','d','e','f','g']
>>> shuffle(x)
>>> x
['b', 'a', 'f', 'e', 'c', 'd', 'g']
>>>
Run Code Online (Sandbox Code Playgroud)

如果您不想在适当的位置修改x,请使用 shuffle(x[:])

  • @JoranBeasley如果你不知道OP正在尝试做什么,那还为时过早,尽管他们应该澄清一下. (3认同)