Python 为什么代码在第一次执行remove方法后退出循环

Python 为什么代码在第一次执行remove方法后退出循环,python,python-3.x,Python,Python 3.x,代码基本上是输入两个列表,并按字母顺序相互比较,如果在两个单词中都找不到字母,则删除该字母 但我的情况是,一旦第一个字母(即在两个单词中都找不到)被删除,它就会退出循环为什么会这样 a = input() b = input() al = list(a) >abc bl = list(b) >cde cnt = 0 for x in al: if x not in bl: al.remove(x)

代码基本上是输入两个列表,并按字母顺序相互比较,如果在两个单词中都找不到字母,则删除该字母 但我的情况是,一旦第一个字母(即在两个单词中都找不到)被删除,它就会退出循环为什么会这样

    a = input()
    b = input()
    al = list(a) >abc
    bl = list(b) >cde
    cnt = 0
    for x in al:
        if x not in bl:
            al.remove(x)
            cnt = cnt + 1

它确实完成了for循环,因为您正在运行时对列表进行更改,同时您正在对其进行迭代,这意味着

al
列表中的字母
a
未在
bl
列表中找到时,它将立即从
al
列表中删除 列表将是
['b','c']
现在在
for循环中
for x in al
意味着是列表的第二个元素,因此列表的第二个元素是
'c'
,它在列表bl中,因此
al
中没有其他元素可以迭代,因此它退出循环

为了做到这一点,您可以使用临时列表来删除,这样它就不会影响真正的列表

a = input()
b = input()
al = list(a) 
bl = list(b)
temp_a = al.copy()
cnt = 0
for x in al:
    if x not in bl:
        temp_a.remove(x)
        cnt = cnt + 1
print(temp_a)

Output:
['c']

什么是abc?Thanx。理解。