通过另一个整数列表中的索引从列表中删除元素

sey*_*yet 4 python list

所以我有两个清单:

num = [
    3, 22, 23, 25, 28, 29, 56, 57, 67, 68, 73, 78, 79, 82, 83, 89, 90, 91,
    92, 98, 99, 108, 126, 127, 128, 131, 132, 133
]
details = [
    'num=10,time=088', 'num=10,time=084', 'num=10,time=080', 'num=10,time=076',
    'num=10,time=072', 'num=10,time=068', 'num=10,time=064', 'num=10,time=060',
    'num=10,time=056', 'num=10,time=052', 'num=10,time=048', 'num=10,time=044',
    .
    .
    .
    .
    'num=07,time=280', 'num=07,time=276', 'num=05,time=508', 'num=05,time=504',
    'num=05,time=500', 'num=05,time=496'
]
Run Code Online (Sandbox Code Playgroud)

num有 28 个元素,details有 134 个元素。我想details根据 中的值按索引删除元素num。例如,索引为 3、22、23、25、28...(这些是num列表中的数字)的元素应从 中删除details

当我按照此处.pop()所述使用时,它给我一个错误:

num = [
    3, 22, 23, 25, 28, 29, 56, 57, 67, 68, 73, 78, 79, 82, 83, 89, 90, 91,
    92, 98, 99, 108, 126, 127, 128, 131, 132, 133
]
details = [
    'num=10,time=088', 'num=10,time=084', 'num=10,time=080', 'num=10,time=076',
    'num=10,time=072', 'num=10,time=068', 'num=10,time=064', 'num=10,time=060',
    'num=10,time=056', 'num=10,time=052', 'num=10,time=048', 'num=10,time=044',
    .
    .
    .
    .
    'num=07,time=280', 'num=07,time=276', 'num=05,time=508', 'num=05,time=504',
    'num=05,time=500', 'num=05,time=496'
]
Run Code Online (Sandbox Code Playgroud)

同样,当我使用del details[]它时,会出现错误:

AttributeError: 'str' object has no attribute 'pop'
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

for an in details:
    an.pop(num)
Run Code Online (Sandbox Code Playgroud)

jtn*_*hof 8

这应该执行您想要的操作(从详细信息中删除由 num 中的值索引的每个元素):

for i in reversed(num):
    del details[i]
Run Code Online (Sandbox Code Playgroud)

它向后迭代列表,以便将来要删除的内容的索引不会改变(否则您将删除 3,然后以前索引为 22 的元素将是 21)——这可能是 IndexError 的来源。

  • 只要“num”中的索引按升序排列就可以了...就像OP的示例中那样,但是没有提到它们的这一方面(因此没有给出)。从这个意义上说,也许“sorted(num,reverse = True)”会是更好的选择。 (7认同)