【发布时间】:2021-12-16 16:19:46
【问题描述】:
这是我第一次接触 Python。我正在学习 Head First Python 书中的一个练习。我正在尝试将一个字符串转换为另一个字符串。 (将“Don't panic!”更改为“on tap”。)首先,我将字符串转换为列表。然后,我在 for 循环中使用 if 语句过滤掉不需要的字母。
不过,我遇到了一些非常奇怪的行为!这是我的代码:
phrase = "Don't panic!"
plist = list(phrase)
print(phrase)
print(plist)
for character in plist:
if character not in ['o', 'n', 't', 'a', 'p', ' ']:
plist.remove(character)
print("removing ", character)
new_phrase = ''.join(plist)
print(plist)
print(new_phrase)
这是我的输出:
Don't panic!
['D', 'o', 'n', "'", 't', ' ', 'p', 'a', 'n', 'i', 'c', '!']
removing D
removing '
removing i
removing !
['o', 'n', 't', ' ', 'p', 'a', 'n', 'c']
ont panc
为什么字母“c”还在?它不在我在 if 语句中使用的数组中,其余字符被过滤掉了。但不是“c”。为什么?
【问题讨论】:
-
修改您正在迭代的列表(即在
for语句中)通常不是一个好主意。您不太可能获得预期的结果(当您对迭代器等更加熟悉时,您会学到更多)。您最好在第一遍中创建一个可移除字母列表,然后再执行另一个循环,将这些字母从列表中移除。
标签: python string list for-loop