我想从列表中删除元素“Ecrire”之前的所有\n项。它只适用于第一种情况,而不适用于其他情况,我真的不明白为什么 这是我的密码:
Corps2 = ['Debut', '\n', '\n', 'Note', ' ', '<-', ' ', 'Saisie()', ' ', '', '\n', '\n', 'Selon que\n', ' ', 'Note', ' ', '≥', ' ', '16', ' ', '', ' ', '', ' ', ':', ' ', '', '\n', '\n', 'Ecrire', ' ', "('TB')", '\n', '\n', '', ' ', 'Note', ' ', '≥', ' ', '14', ' ', '', ' ', '', ' ', ':', ' ', '', '\n', '\n', 'Ecrire', ' ', "('B')", '\n', '\n', '', ' ', 'Note', ' ', '≥', ' ', '12', ' ', '', ' ', '', ' ', ':', ' ', '', '\n', '\n', 'Ecrire', ' ', "('AB')", '\n', '\n', '', ' ', 'Note', ' ', '≥', ' ', '10', ' ', '', ' ', '', ' ', ':', ' ', '', '\n', '\n', 'Ecrire', ' ', "('Passable')", '\n', '\n', 'Sinon', ' ', ':', ' ', 'Ecrire', ' ', "('Redoublant')", '\n', '\n', 'Fin_Si']
for i in Corps2:
if i =='Ecrire' and Corps2[Corps2.index('Ecrire')-2 :Corps2.index('Ecrire')]==['\n','\n'] :
del Corps2[Corps2.index('Ecrire')-2 :Corps2.index('Ecrire')]
两个问题:在对列表进行迭代时修改列表,并且
.index
只找到第一项下面查找所有要删除的位置,然后按相反顺序删除它们,以便索引不会指向错误的元素,如果在正向方向删除,则会发生这种情况:
注意:如果在对字符串进行标记化之前对其进行处理,则可以首先执行
.replace('\nEcrire','Ecrire')
仅供参考,元素
'≥'
表示字符串解码错误:这一行可以满足您的需要:
index
调用将始终返回字符串的第一个实例。在这种情况下,你真的想循环列表的索引,而不是直接循环列表的元素还请注意you can't ^{} elements from the list you are currently traversing ;但是,当然,当您循环一个间接索引时,您可以,只要您在任何
IndexError
上进行termrnate演示:https://ideone.com/LhEvUB
您应该了解
IndexError
是如何发生的-您正在为每个已删除的元素缩短列表,因此计算的结束索引将超出列表的结尾,超出了那么多项。另外,幸运的是,我们已经知道,替换'\n'
的元素永远不会是'\n'
(也就是说,因为它将是'Ecrire'
),因此如果不是这样,我们可以方便地避免所需的复杂情况切题地说,Python中常规变量的名称不应大写;大写的名称通常是类名
相关问题 更多 >
编程相关推荐