给定一个排序选票列表和一个要淘汰的候选人列表,我需要返回一个新的排序选票列表,其中要淘汰的候选人列表中的所有候选人都已被删除。
这是我到目前为止尝试过的代码
import doctest
def eliminate_candidate(ballots, to_eliminate):
'''
(list, list) -> list
>>> eliminate_candidate([['NDP', 'LIBERAL'], ['GREEN', 'NDP'], \
['NDP', 'BLOC']], ['NDP', 'LIBERAL'])
[[], ['GREEN'], ['BLOC']]
>>> eliminate_candidate([], [])
[]
>>> eliminate_candidate([[]], [])
[[]]
'''
new_list = []
# Copy ballots onto new list
for item in ballots:
new_list.append(item)
for item in new_list:
for element in item:
if element in to_eliminate:
item.remove(element)
return new_list
我的第一个 doctest 失败了,而是给我这个输出:
[['LIBERAL'], ['GREEN'], ['BLOC']]
最佳答案
使用 sets
变得非常简单!
ballots = [['NDP', 'LIBERAL'], ['GREEN', 'NDP'], ['NDP', 'BLOC']]
to_eliminate = ['NDP', 'LIBERAL']
result = [list(set(x) - set(to_eliminate)) for x in ballots]
result
[[], ['GREEN'], ['BLOC']]
或者:
result = [list(set(x).difference(to_eliminate)) for x in ballots]
result
[[], ['GREEN'], ['BLOC']]
关于python - 如何从嵌套列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58839810/