我有一个球员名单和一个元组名单
result = result.Where(x => x.CreationTime > latestMessageDateTime );
有两对和一个元组。 我希望每个玩家都从候选列表中选择一个元组,但是如果他们在候选列表中,那么他们就不能选择他们所在的元组。
我当前的尝试:
players = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
shortlist = [('a', 'b'), ('c', 'd'), ('e',)]
但是我只是在数据框中得到空值。我认为一定有一种使用列表理解的方法,但是我不太清楚。预先感谢
答案 0 :(得分:0)
在遍历列表时(例如使用remove
),您不想修改列表。
也许您正在寻找类似的东西?
import random
choices = []
for person in players:
eligible_items = [item for item in shortlist if person not in item]
their_choice = random.choices(eligible_items)[0]
choices.append(their_choice)
还是一个大列表理解?
[
random.choices([item for item in shortlist if person not in item])[0]
for person in players
]
答案 1 :(得分:0)
可以在列表理解中完成第二个循环的代码修改,所以这样的事情应该起作用:
for person in players:
df[person] = random.choices(shortlist, [person not in choice for choice in shortlist])
这里发生的是我们在选择的第二个参数中为每个选择分配权重。使用列表推导为每个人计算权重,对于包含该人的选择,权重为False
,对于其他人,权重为True
。幸运的是,random.choices()
接受True False列表,因为权重或需要转换为0和1。