AJ.*_*AJ. 6 python random slice
是否存在切片序列类型的pythonic方法,使得返回的切片具有随机长度并且是随机顺序的?例如,类似于:
>>> l=["a","b","c","d","e"]
>>> rs=l[*:*]
>>> rs
['e','c']
Run Code Online (Sandbox Code Playgroud)
And*_*ite 13
怎么样...
random.sample(l, random.randint(1, len(l)))
Run Code Online (Sandbox Code Playgroud)
可以在此处找到随机模块的文档的快速链接.
您的问题和其他答案都没有解决一个微妙的区别,所以我觉得我应该指出它。下面的例子说明了这一点。
>>> random.sample(range(10), 5)
[9, 2, 3, 6, 4]
>>> random.sample(range(10)[:5], 5)
[1, 2, 3, 4, 0]
Run Code Online (Sandbox Code Playgroud)
正如您从输出中看到的,第一个版本不会“切片”列表,而只是对其进行采样,因此返回值可以来自列表中的任何位置。如果您确实想要列表的“切片” - 也就是说,如果您想在采样之前限制样本空间 - 那么以下内容不会满足您的要求:
random.sample(l, random.randint(1, len(l)))
Run Code Online (Sandbox Code Playgroud)
相反,你必须这样做:
sample_len = random.randint(1, len(l))
random.sample(l[:sample_len], sample_len)
Run Code Online (Sandbox Code Playgroud)
但我认为更好的方法是这样的:
shuffled = l[:random.randint(1, len(l))]
random.shuffle(shuffled)
Run Code Online (Sandbox Code Playgroud)
shuffle不幸的是,我知道没有副本返回版本(即shuffled类似于sorted)。
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |