假设我有一个按偏好降序排列的列表:
person_choice = ['amy', 'bob', 'chad', 'dan', 'emily']
Run Code Online (Sandbox Code Playgroud)
意思是,amy优先于bob,优先于谁chad等等。
我还有几个这样的列表(名称没有特定的顺序和列表长度出现):
group1 = ['joyce', 'amy', 'emily', 'karen', 'rebecca']
group2 = ['chad', 'kyle', 'michael', 'neo', 'bob']
...
Run Code Online (Sandbox Code Playgroud)
在每个group1和中group2,我想选择此列表中具有person_choice最高偏好的人。所以,预期的输出是这样的:
group1_choice = 'amy'
group2_choice = 'bob'
Run Code Online (Sandbox Code Playgroud)
假设对于每个groupX,至少有一个人出现在person_choice,Python 中是否有一个单行代码可以在没有复杂for循环的情况下执行此操作?
max与自定义一起使用key:
person_choice = ['amy', 'bob', 'chad', 'dan', 'emily']
group1 = ['joyce', 'amy', 'emily', 'karen', 'rebecca']
group2 = ['chad', 'kyle', 'michael', 'neo', 'bob']
def choice(group):
return max(group, key=lambda name: -person_choice.index(name) if name in person_choice else float('-inf'))
print(choice(group1))
print(choice(group2))
Run Code Online (Sandbox Code Playgroud)
结果:
amy
bob
Run Code Online (Sandbox Code Playgroud)