我一直致力于一个项目,我遍历一个数据列表并删除某些字符前的所有文本。 (这是一个参考的例子)
>>> myList = ['foo<foo','bar<bar','baz<baz']
>>> for element in myList:
for char in element:
if (char == "<"):
break
else:
charIndex = element.index(char)
elementIndex = myList.index(element)
print(charIndex, elementIndex)
myList[elementIndex] = element[charIndex + 1 :]
0 0
Traceback (most recent call last):
File "<pyshell#37>", line 7, in <module>
elementIndex = myList.index(element)
ValueError: 'foo<foo' is not in list
>>> myList
['oo<foo', 'bar<bar', 'baz<baz']
>>>
由于我不知道的原因,该元素在重新分配后未重命名 任何帮助都会很棒,提前谢谢!
答案 0 :(得分:1)
您在设置myList[elementIndex]=
['oo<foo', 'bar<bar', 'baz<baz']
myList[elementIndex] = element[charIndex + 1:] # removes f
element[charIndex + 1:] is from the `first index + 1` so it becomes `'oo<foo'`
如果您在循环中放置print(element[charIndex + 1 :])
,则会看到'oo<foo'
,因此'foo<foo'
将不再出现在您的myList中,您将获得ValueError
您已在element
的第一次迭代中为'foo<foo'
分配了for element in myList
,因此您要与原始元素进行比较,而不是第二次循环中更新的列表元素。
您需要更新第二个循环中元素的值:
myList[elementIndex] = element[charIndex + 1 :]
element = element[charIndex + 1 :]
哪个输出:
['<foo', '<bar', '<baz']
您也可以使用列表comp在一行中执行此操作,如果“&lt;”也可以使用不在某些字符串中:
[s[s.index("<"):] if "<" in s else s for s in myList ]