我正在处理一些问题,我找不到任何解决办法。 我的问题是,如果嵌套列表中的某个值不在另一个列表中,则控制该值;如果该值不在另一个列表中,则将其删除,但在“不在”行中,则会出现类似索引超出范围的错误。在
def heroes_updater(men_pref,women):
for i in range(0,len(men_pref)-1):
for j in range(0,len(men_pref[i])-1):
if men_pref[i][j] not in women:
men_pref[i]=men_pref[i][:j]+men_pref[i][j+1:]
男士优先:
^{pr2}$女性榜样:
['Jean Grey', 'Elektra', 'Mystique', 'Ms. Marvel', 'Rouge']
错误是:
if men_pref[i][j] not in women:
IndexError: list index out of range
通过从列表中删除元素,列表变得更短
j
大于列表的长度。为了避免这个问题,不要修改列表,而是创建一个新列表:或更好:
^{pr2}$你在编辑你正在阅读的列表,千万不要这样做。在
使用
men_pref[i]=men_pref[i][:j]+men_pref[i][j+1:]
您正在从列表
men_pref[i]
中删除一个项目,但是您的j
变量从0
变为列表的原始长度,因此当您检查men_pref[i][j]
ifj>len(men_pref[i])
时,最终会出现索引错误编辑: 如果你想编辑你当前的列表,那么你必须用一个向后的索引来阅读它(你从最后一个开始,如果它不在女性列表中,你可以删除它,然后继续下一个项目):
另一种方法是使用列表理解:
^{pr2}$还有其他的选择,但我把这个留给你。 你就是这样学的。在
您可以使用具有list comp的集合,不能迭代和变异列表,因为每次删除元素时,列表都会变小,并且索引基于开始范围时列表的大小:
或者功能上,如果顺序无关:
^{pr2}$您也可以从列表的末尾开始,使用范围逻辑,但是使用
^{3}$range(len(sub)-1,-1, -1)
,但是只使用reversed并迭代元素本身会更容易:相关问题 更多 >
编程相关推荐