首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对列表中不连续的元素进行混洗?

如何对列表中不连续的元素进行混洗?
EN

Stack Overflow用户
提问于 2020-12-19 01:21:18
回答 4查看 89关注 0票数 3

我在Python中有一个类似如下的列表:

代码语言:javascript
运行
复制
["Apple", "Banana", "Coconut", "Durian", "Elderberry", "Fig", "Guava"]

我的目标是打乱列表,以便某些元素被打乱,而其他元素则留在原来的地方。

例如,如果要对第0、1、2、4和6个元素进行混洗,则混洗的可能结果为:

代码语言:javascript
运行
复制
["Elderberry", "Banana", "Apple", "Durian", "Guava", "Fig", "Coconut"]

我该怎么做呢?random.shuffle似乎只支持单个对象/切片。单独对每个切片进行混洗只会在每个切片之间进行混洗,而不是在所有切片之间进行。

EN

Stack Overflow用户

发布于 2020-12-19 01:42:04

下面这样简单的代码就可以解决这个问题了:

代码语言:javascript
运行
复制
from random import shuffle

def funct(all_elem, indices):
    to_shuffel = all_elem.copy()
    for index in sorted(indices, reverse=True):
        del to_shuffel[index]

    shuffle(to_shuffel)
    for index in indices:  # Add the static elements to the shuffled list, accordingly.
        to_shuffel.insert(index, all_elem[index])
    return to_shuffel

创建一个接收要混洗的列表的函数,以及一组索引,这些索引将告诉您列表的哪一部分应该保持不变。创建一个包含可以随机排列的元素的列表,对它们进行随机排列,最后将fix元素插入到新的随机排列列表上的正确索引中。

适用于:

代码语言:javascript
运行
复制
list = ["Apple", "Banana", "Coconut", "Durian", "Elderberry", "Fig", "Guava"]
print(funct(list, (0, 1)))

输出:

代码语言:javascript
运行
复制
['Apple', 'Banana', 'Fig', 'Elderberry', 'Durian', 'Coconut', 'Guava']
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65361245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档