繁体   English   中英

如何在Python中使用约束对列表进行混洗,其中某些元素不能出现在另一个元素之后

[英]How do I shuffle a list with constraints in Python where some elements cannot appear after another element

我已经阅读了几篇关于条件洗牌/随机化的文章,但找不到任何能够很好地回答我的问题的文章。

我有两个包含字符串的列表:

fruit = ['apple', 'pear', 'banana', 'orange'...]
labels = ['A', 'B', 'B', 'D'...]

每个列表可能包含重复项。

我想做的是将一个包含水果和标签的列表混洗,新标签中任何一个标签的位置可能在相应水果的前面而不是后面出现,所以我得到了这样的内容:

fruit_and_labels = ['D', 'orange', 'B', 'B', 'banana', 'A', 'pear', 'apple'...]

我尝试了许多方法,但无法找出一种解决方案,其中对于结果列表中的所有水果,此条件始终为真。

我是python的新手,所以如果措辞不佳或经过深思熟虑,我们深表歉意-欢迎大家张开双臂欢迎所有反馈! 谢谢

从示例输出来看,我认为您的意思是在水果出炉后不应出现任何标签。 如果是这样的话:

import random

fruit = ['apple', 'pear', 'banana', 'orange']
labels = ['A', 'B', 'B', 'D']

# shuffle fruits
result = list(fruit)
random.shuffle(result)

# insert labels at random positions 
# between the beginning of the list and the corresponding fruit
for l,f in zip(labels,fruit):
    result.insert(random.randint(0,result.index(f)),l)

print result

输出:

['D', 'B', 'banana', 'orange', 'B', 'A', 'apple', 'pear']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM