有效的清除重复在蟒蛇

0

的问题

我有一个编码小的代码,谁属性,每个元素的列表中,一个分数...要做到这一点,我需要这样做(简化的代码):

group={1:["Jack", "Jones", "Mike"],
       2:["Leo", "Theo", "Jones", "Leo"],
       3:["Tom", "Jack"]}

already_chose=["Tom","Mike"]
result=[]

for group_id in group:
    name_list = group[group_id]
    y=0;x=0
    repeat=[]
    for name in name_list:
        if name in already_chose:
            y+=1
        elif name not in repeat:
            x+=1
            repeat.append(name)
    score_group=x-y
    result.append([group_id,score_group])

输出: [[1, 1], [2, 3], [3, 0]]

问题是,如果你读这个代码,这不是最优化的一个大枚举的(超过7000团体和100名通过组)...

我希望有人能帮帮我吗? 非常感谢

1

最好的答案

3

IIUC,你想要得到的长度设定的独特的名字不在 already_chose 减去的数量的名字在 already_chose.

这是很容易实现与python集和列表的理解。 其优点在使用python套,操作很快由于散列的要素。

[[k, len(set(v).difference(already_chose))-len(set(v).intersection(already_chose))]
 for k,v in group.items()]

输出: [[1, 1], [2, 3], [3, 0]]

NB。 可能会更有用的作词典的理解:

{k: len(set(v).difference(already_chose))-len(set(v).intersection(already_chose))
 for k,v in group.items()}

输出: {1: 1, 2: 3, 3: 0}

2021-11-14 19:21:50

我不知道该组().差异()!!!! Thk
BiMathAx STUDIO

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................