从列表中删除单个字符

4 投票
1 回答
14449 浏览
提问于 2025-04-18 11:02

我在理解为什么我的代码不工作的原因上遇到了困难。
我想从一个列表中删除那些只有一个字母的单词:

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

撰写回答