gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:39 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com