Shell's Home

Apr 8, 2008 - 1 minute read - Comments

python的非经典错误

def comp_tuple_file(tuple_file1, tuple_file2): for i in tuple_file1: if i in tuple_file2: tuple_file1.remove(i) tuple_file2.remove(i)

if __name__ == "__main__":
    t1 = [(1, "1"), (2, "2"), (3, "3")]
    t2 = [(1, "1"), (3, "3"), (2, "2"), (4, "2")]
    comp_tuple_file(t1, t2)
    print(t1)
    print(t2)

错在哪里?

头一次循环,i=(1,“1”)被正确移除了。但是接下来,i=(3,“3”)?

这个叠代器的行为很有意思哦,貌似叠代器内存储的是集合的索引。

def comp_tuple_file(tuple_file1, tuple_file2):
    collection = tuple_file1[:]
    for i in collection:
        if i in tuple_file2:
            tuple_file1.remove(i)
            tuple_file2.remove(i)


if __name__ == "__main__":
    t1 = [(1, "1"), (2, "2"), (3, "3")]
    t2 = [(1, "1"), (3, "3"), (2, "2"), (4, "2")]
    comp_tuple_file(t1, t2)
    print(t1)
    print(t2)

这才是正确的代码。