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

2024-06-16 12:14:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个主题数组,每个主题都连接时间。我想比较清单上的每一个科目。如果有两个相同的主题,我想添加两个主题的时间,还想删除第二个主题信息(主题名称和时间)。

但如果我删除了该项,则列表会变短,并且会出现超出范围的错误。我试图使用subjectlegth-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

Tags: in信息主题列表foriftime时间
3条回答

如果subject的元素是散列的:

finalinfo = {}

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

这将产生一个带subject: time键值对的dict。

向后迭代,如果可以:

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

y来说也是如此。

最佳做法是创建要删除的条目的新列表,并在遍历列表后将其删除:

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]

相关问题 更多 >