如果元素中包含元组,则从列表中删除元组

时间:2020-10-30 15:31:30

标签: python list tuples list-comprehension

我有一个球员名单和一个元组名单

    result = result.Where(x => x.CreationTime > latestMessageDateTime );

有两对和一个元组。 我希望每个玩家都从候选列表中选择一个元组,但是如果他们在候选列表中,那么他们就不能选择他们所在的元组。

我当前的尝试:

players = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
shortlist = [('a', 'b'), ('c', 'd'), ('e',)]

但是我只是在数据框中得到空值。我认为一定有一种使用列表理解的方法,但是我不太清楚。预先感谢

2 个答案:

答案 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。