python - 如何从嵌套列表中删除项目

标签 python list for-loop

给定一个排序选票列表和一个要淘汰的候选人列表,我需要返回一个新的排序选票列表,其中要淘汰的候选人列表中的所有候选人都已被删除。

这是我到目前为止尝试过的代码

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/

相关文章:

python - 如何同时获取多个属性?

javascript - 为什么这个循环不输出修改后的 CSS?

python - 脚本语言 : Max. 行长

html - 继续添加 <li> 到 <ul> 直到达到高度

python - (Python)如何将整数列表转换为集合列表,其中每个集合都是这些整数中的一对?

python - 有没有使用元素树从 xml 文件创建多个数据框的方法?

python - 理解Python中列表数组的创建

javascript - 使用随机生成的值检查数组中的重复项

python - 如何在 python 中拆分一个列表,知道它的子列表?

Python 在循环中支持 `else`。 Ruby 中是否有类似的功能?