在Python中,如果某些元素不能出现在另一个元素之后,如何在带有约束的列表中洗牌
我已经读了一些关于条件洗牌/随机化的帖子,但找不到任何能完全回答我问题的东西 我有两个包含字符串的列表:在Python中,如果某些元素不能出现在另一个元素之后,如何在带有约束的列表中洗牌,python,Python,我已经读了一些关于条件洗牌/随机化的帖子,但找不到任何能完全回答我问题的东西 我有两个包含字符串的列表: fruit = ['apple', 'pear', 'banana', 'orange'...] labels = ['A', 'B', 'B', 'D'...] 每个列表可能包含重复项 我想做的是将水果和标签组合在一起,其中新列表中任何一个标签的位置可能出现在相应水果之前的任何位置,但不会出现在相应水果之后,因此我得到如下结果: fruit_and_labels = ['D', 'ora
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']
“对应字符串”是什么?你是说标签吗?如果是这样,“橙色”出现在它的标签后面……出于好奇,这种洗牌的用例是什么?:)@这不是很明显吗?分发水果和标签。“对应字符串”是什么?需要哪种类型的输出??你能给出一个输出示例吗?@yurib和S_抱歉,这一点都不清楚。我所说的对应是指在原始两个列表中具有相同列表索引的字符串。例如,在前两个列表中,我给出了‘苹果’和‘A’、‘梨’和‘B’、‘香蕉’和‘B’等等。这更清楚吗?太完美了!现在我明白了,这很简单。我用zip做了一个类似的尝试,将整个列表洗牌,但没有想到在之后插入标签。非常感谢你的帮助。