如何在 for 循环中设置动态范围(避免在循环期间删除项目时索引超出范围)?



我有一个包含许多数据帧的字典 我正在尝试通过查找内容匹配的键来连接和减少我的字典,并连接这些键,在每次连接之后,我想删除字典中的一个键。 假设每个键都是以创建数据帧的日期命名的,我想连接 2018 年的所有列表...... 问题是我得到索引错误:列出索引超出范围(我猜在删除一个键后,因为 for 循环的范围保持不变( 我想做的是,每次删除后,范围都会调整为 -1,所以我不会遇到这个问题。 有什么想法吗?

for i in range(len(dict)-2):
for j in range(1,(len(dict)-1)):
if (list(dict.keys())[i][4:12] ==list(dict.keys())[j][4:12]):
dict[list(dict.keys())[i]] = pd.concat([dict[list(dict.keys()[i]],dict[list(dict.keys()[j]],sort= False)
del dict[list(dict.keys())[j]

IndexError: list index out of range

由于列表中的元素在删除它们前面的任何内容后会向左移动,因此您可以从后面循环浏览列表。 下面是一个简单的示例,它比您的代码更容易理解:

>>> l = [1, 2, 3, 4, 5, 6]
>>> for i in range(len(l)):
real_i = len(l)-i-1
if l[real_i] % 2 == 0:
del l[real_i]

>>> l
[1, 3, 5]

在这里,我从列表中删除了可以除以 2 的每个元素。由于我使用real_i = len(l)-i-1从最后一个开始计算索引,因此是否从列表中删除元素并不重要。

最新更新