Python 3 'for'命令迭代松散了序列顺序



下面的例子似乎表明"对于";值得怀疑。请注意,"c"不在"words"中,但尚未从列表中删除。

phrase = "Don't panic!"
plist = list(phrase)
words = 'on tap'
for char in plist:
# if the char from plist is not in words, then remove it from plist
    if char not in words:
        plist.remove(char)
    else:
        pass
print(plist)
['o', 'n', 't', ' ', 'p', 'a', 'n', 'c']

我理解正在发生的事情——"for"序列的初始状态没有保留:迭代不一致。

也许是我。然而,在tcl中实现的相同逻辑会产生一个反映"foreach"迭代意图的结果:

o n t ' ' p a n

请告诉我关于Python迭代缺少什么。Rick

在迭代集合时不应该修改它。创建一个新数组并将所需元素推入其中。

phrase = "Don't panic!"
plist = list(phrase)
words = 'on tap'
result = []
for char in plist:
if char in words:
result.append(char)
print(result)

输出['o', 'n', 't', ' ', 'p', 'a', 'n']

最新更新