使用for循环删除列表中的项目

4 投票
5 回答
11666 浏览
提问于 2025-04-15 17:59

我有一个包含科目的数组,每个科目都有对应的时间。我想比较列表中的每个科目。如果有两个相同的科目,我想把这两个科目的时间加在一起,并且想删除第二个科目的信息(包括科目名称和时间)。

但是如果我删除了这个项目,列表就会变短,这样我就会遇到超出范围的错误。我试着用subjectlength-1来缩短列表,但这也不行。

   ...
   subjectlegth = 8
   for x in range(subjectlength):
        for y in range(subjectlength):
            if subject[x] == subject[y]:
                if x != y:
                    #add
                    time[x] = time[x] + time[y]
                    #delete
                    del time[y]
                    del subject[y]
                    subjectlength = subjectlength - 1

5 个回答

6

最好的做法是先创建一个新的列表,把要删除的项目放进去,然后再在遍历原列表后删除这些项目。

to_del = []
subjectlength = 8
for x in range(subjectlength):
    for y in range(x):
        if subject[x] == subject[y]:
            #add
            time[x] = time[x] + time[y]
            to_del.append(y)

to_del.reverse()
for d in to_del:
    del subject[d]
    del time[d]
8

如果subject里的元素是可以被哈希的:

finalinfo = {}

for s, t in zip(subject, time):
  finalinfo[s] = finalinfo.get(s, 0) + t

这会生成一个字典,里面有subject: time这样的键值对。

8

如果可以的话,试着从后往前循环:

for x in range(subjectlength - 1, -1, -1):

y 也可以这样做。

撰写回答