使用for循环删除列表中的项目
我有一个包含科目的数组,每个科目都有对应的时间。我想比较列表中的每个科目。如果有两个相同的科目,我想把这两个科目的时间加在一起,并且想删除第二个科目的信息(包括科目名称和时间)。
但是如果我删除了这个项目,列表就会变短,这样我就会遇到超出范围的错误。我试着用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
也可以这样做。