python - 就地改组列表的一部分
问题描述
我有一个list
,我想就地洗牌它的一部分。
我知道random.shuffle()
并且它可以就地工作,但是如果我对列表进行切片,它会打乱原始输入的切片副本,而原始输入list
保持不变:
import random
l = list(range(20))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
random.shuffle(l[:10]) # I wish it was shuffling the first half
print(l) # but does nothing to `l`
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
我有什么选择?
编辑:这并不是这个问题的真正副本,因为它不需要就地。最终,正如其中发布的答案之一所建议的那样,似乎可以仅手动将列表的一部分就地改组(这正是我试图避免的)。
解决方案
不是真的到位,但具有预期的结果:
import random
l = list(range(20))
lpart = l[:10]
random.shuffle(lpart)
l[:10] = lpart
print(l)
推荐阅读
- javascript - 访问对象中的嵌套键并将它们与其他对象键进行比较,但第二个是对象数组
- azure - 如何将文件从多个源文件夹复制到 Azure Data Lake Storage Gen 2 中的目标文件夹
- mongodb - 如何在 golang 中获取 mongodb 的 int 类型`_id`?
- python - 为什么程序需要这么长时间才能运行?
- angular - 如何在 Angular 8 生产版本上压缩文件
- javascript - puppeteer:遍历 CSV 文件并为每一行截屏?
- css - Sharepoint 列表自定义 JSON 视图未在列表 Web 部件中正确显示
- c# - 哪种方法更好?防止异常或处理异常
- python - 无法实现此 python 程序以找到具有 2D 数组最大和的子数组的总和
- javascript - 使用虚拟对象从另一个对象数组创建对象数组