python - 同时从多个列表中删除元素

标签 python

我有三个长度相同的列表,另一个列表存储我需要从所有三个列表中删除的元素的索引。这是我的意思的一个例子:

a = [3,4,5,12,6,8,78,5,6]
b = [6,4,1,2,8,784,43,6,2]
c = [8,4,32,6,1,7,2,9,23]

(都有len()=9)

另一个列表包含我需要从所有三个列表中删除的那些元素的索引:

d = [8,5,3]

(注意已经排序了)

我知道我可以一次从三个列表中删除一个元素:

for indx in d:
    del a[indx]
    del b[indx]
    del c[indx]

如何在一行中完成此操作?

最佳答案

不是一行,而是简洁、可读且完全地道的 Python:

for indx in d:
    for x in a, b, c:
        del x[indx]

但是,您首先要执行此操作的事实意味着,您应该拥有一个包含 3 个列表的列表,或者一个由名称 键入的三个列表组成的字典,而不是 3 个单独的列表变量a''b''c'


如果你真的想要一行:

for indx in d: a.pop(indx), b.pop(indx), c.pop(indx)

但这真的很糟糕。当您不关心值时调用 pop,并构建不需要的 tuple

如果您想玩代码高尔夫,您可以通过使用列表理解来保存一些字符——这会增加一种语言滥用,并构建另一个您实际上并不想要的更大的对象——如 Ioan Alexandru Cucu 的回答:

[x.pop(indx) for indx in d for x in a, b, c]

当然,将其写在一行中的最佳方式是将其分解为一个函数:

def delemall(indices, *lists):
    for index in indices:
        for x in lists:
            del x[indx]

现在,您需要执行此操作的 300 次中的每一次,都只是:

delemall(d, a, b, c)

关于python - 同时从多个列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345474/

相关文章:

python - 如何访问标签内的标签(获取标签文本等值)?如何获取(段落)p 标签内 h1 标签的值?

python - PDF 到 IMAGE 到 PDF 全部在内存中完成

python - 分组 pandas 数据帧中的嵌套字典

Python C API : How to get PyRun_String with Py_eval_input to use imported modules?

python - 在 Python 中检查字符串中的数字

python - 请求库 GET 方法重定向所有带有 header 位置的响应,还是仅重定向状态代码为 300 的响应?

python - 将 Python 数据结构输出到 reStructuredText 有哪些方法

python - XLSXWriter num_format 来分隔千、百万甚至十亿?

Python复制具有相同ID值的行

python - Python 数据框中的滚动回归估计