从列表中删除单个字符
我在理解为什么我的代码不工作的原因上遇到了困难。
我想从一个列表中删除那些只有一个字母的单词:
line = ['word','a','b','c','d','e','f','g']
for words in line:
if len(words) == 1:
line.remove(words)
这段代码的运行结果是这样的(看起来是把“每隔一个”的单字母都去掉了):
>>> line
['word', 'b', 'd', 'f']
有没有人能解释一下为什么这样不正常,以及该怎么修复呢?
1 个回答
12
这样做:
line = ['word','a','b','c','d','e','f','g']
line = [i for i in line if len(i) > 1]
你代码的问题在于,你在遍历列表的时候同时删除了列表中的元素,这样做是不安全的。因为这样会改变列表的长度:
line = ['word','a','b','c','d','e','f','g']
iterated = 0
removed = 0
for words in line:
iterated += 1
if len(words) == 1:
line.remove(words)
removed += 1
print line # ['word', 'b', 'd', 'f']
print iterated # 5
print removed # 4