如何解决Python随机切片成语
| 有没有一种pythonic方法可以对序列类型进行切片,以使返回的切片具有随机长度和随机顺序?例如,类似:>>> l=[\"a\",\"b\",\"c\",\"d\",\"e\"]
>>> rs=l[*:*]
>>> rs
[\'e\',\'c\']
解决方法
怎么样...
random.sample(l,random.randint(1,len(l)))
可在此处找到随机模块文档的快速链接。
, 我不知道成语,但是random.sample
可以满足您的需求。
>>> from random import sample,randint
>>>
>>> def random_sample(seq):
... return sample(seq,randint(0,len(seq)))
...
>>> a = range(0,10)
>>> random_sample(a)
[]
>>> random_sample(a)
[4,3,9,6,7,1,0]
>>> random_sample(a)
[2,8,4,5,7]
, 有一个微妙的区别,您的问题和其他答案都没有解决,因此我认为应该指出。下面的示例对此进行了说明。
>>> random.sample(range(10),5)
[9,2,4]
>>> random.sample(range(10)[:5],5)
[1,0]
从输出中可以看到,第一个版本不对列表进行“切片”,而只是对其进行采样,因此返回值可以来自列表中的任何位置。如果您确实需要列表的“切片”,也就是说,要在采样之前限制采样空间,则以下操作无法满足您的要求:
random.sample(l,len(l)))
相反,您将必须执行以下操作:
sample_len = random.randint(1,len(l))
random.sample(l[:sample_len],sample_len)
但是我认为更好的方法是这样的:
shuffled = l[:random.randint(1,len(l))]
random.shuffle(shuffled)
不幸的是,我没有意识到ѭ8的副本返回版本(即类似于ѭ10的shuffled
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。