所以我有两个清单:
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'
]
num
有28个元素,details
有134个元素。我想根据details
中的值,按索引删除num
中的元素。例如,索引为3,22,23,25,28 ......的元素(这些是num
列表中的数字)应从details
中删除。
当我按照here所述使用.pop()
时,它会给我一个错误说:
AttributeError: 'str' object has no attribute 'pop'
类似地,当我使用del details[]
时,它给出了一个错误说:
IndexError: list assignment index out of range
这是我的代码:
for an in details:
an.pop(num)
答案 0 :(得分:3)
这应该做你想要的(从num中删除每个元素索引的每个元素的详细信息):
for i in reversed(num):
del details[i]
它向后迭代列表,以便删除未来事物的索引不会改变(否则你删除3然后将以前索引为22的元素为21) - 这可能是IndexError的来源。
答案 1 :(得分:0)
嗯。两件事情。首先你的循环不太正确。而不是
for an in details:
an.pop(num)
你想要
for an in num: # step through every item in num list
details.pop(an) # remove the item with index an from details list
其次,您需要确保以相反的顺序从详细信息中弹出()项目,以便您的索引良好。例如,如果您从详细信息中弹出()索引3,则详细信息中的所有其他内容都会重新排序,当您去除索引22时,它将是错误的"单元格"。
我已将简化的细节简化为包含数字0到133的列表,但此代码在您的真实列表中应该可以正常工作
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 = list(range(134))
# sort indexes in descending order (sort in place)
num.sort(reverse = True)
for an in num:
details.pop(an)
print(details)
输出
[0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24,
26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71,
72, 74, 75, 76, 77, 80, 81, 84, 85, 86, 87, 88, 93, 94, 95, 96, 97, 100, 101, 10
2, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 11
9, 120, 121, 122, 123, 124, 125, 129, 130]