Python |如何添加元素添加到列表中随机
有没有一种方法追加元素添加到列表中随机,内置函数Python |如何添加元素添加到列表中随机
例如:
def random_append():
lst = ['a']
lst.append('b')
lst.append('c')
lst.append('d')
lst.append('e')
return print lst
这会出来把['a', 'b', 'c', 'd', 'e']
但我想它随机添加元素,并把这样的东西这样的: ['b', 'd', 'b', 'e', 'c']
是的有一个函数random.shuffle(),但它洗牌清单一旦我不需要,我只想执行随机插入。
如果您需要在随机位置执行单一插入,则已经给琐碎exapmle工作:
from random import randrange, sample
def random_insert(lst, item):
lst.insert(randrange(len(lst)+1), item)
不过,如果你需要插入k个项目,以长度的名单N,则使用先前给出的函数是O(n * k + k ** 2)复杂度。然而,如果您提前计算目标位置并一次重写输入列表,则可以在线性时间O(n + k)中插入多个项目:
def random_insert_seq(lst, seq):
insert_locations = sample(xrange(len(lst) + len(seq)), len(seq))
inserts = dict(zip(insert_locations, seq))
input = iter(lst)
lst[:] = [inserts[pos] if pos in inserts else next(input)
for pos in xrange(len(lst) + len(seq))]
如果有应该是每个项目的
>>> from random import randint
>>> a=[]
>>> for x in "abcde":
... a.insert(randint(0,len(a)),x)
...
>>> a
['b', 'a', 'd', 'c', 'e']
只有一个如果允许重复(如输出指示)
>>> from random import choice
>>> a=[choice("abcde") for x in range(5)]
>>> a
['a', 'b', 'd', 'b', 'a']
请注意,这是O(n^2)并填充'a',然后使用'random.shuffle'为O(n)。 – 2010-03-19 07:17:02
@Mike Graham,大概是OP想要在插入之间做一些事情,因为他们不想使用shuffle。 – 2010-03-19 07:24:58
@gnibbler,我真的很难从描述中准确理解OP所需要的内容。正如Python公理所指出的那样,*面对模糊性,拒绝猜测的诱惑*。 – 2010-03-19 07:27:18
random.shuffle
可能是这个职位的最佳工具。它很简单,显而易见,而且名字很可能比你会得到的其他建议更具可读性。此外,使用它是O(n),但使用insert
(O(n)操作)n次是二次的。
from random import choice
n=10
seq=['a','b','c','d']
rstr=[choice(seq) for i in range(n)]
是否应该有两个“b” s在输出? – 2010-03-19 07:06:29
将整个列表重新排序可能比随机插入更具可扩展性。 (我不确切知道你需要从这篇文章中得知,说实话。) – 2010-03-19 07:17:46
你可以更具体地讲述这个_random inserts_应该如何工作吗?你知道先验元素的数量吗? – 2010-03-19 08:18:36