不应该像第一个一样输出第二个代码

为什么第二个代码给出的输出与第一个不同?

  1. 使用 for 循环:
my_list = [1, 2, 3, 4, 2, 6, 2, 2, 7, 3, 8, 2]
uniques = []
for item in my_list:
    if item not in uniques:
        uniques.append(item)
print(uniques)
my_list = [1, 2, 3, 4, 2, 6, 2, 2, 7, 3, 8, 2]
uniques = []
for item in my_list:
    if item not in uniques:
        uniques.append(item)
print(uniques)

输出:

  1. 使用列表理解:

my_list = [1, 2, 3, 4, 2, 6, 2, 2, 7, 3, 8, 2]
uniques = []
uniques = [item for item in my_list if item not in uniques]
print(uniques)

输出:

[1, 2, 3, 4, 6, 7, 8]

回答

该表达式[item for item in my_list if item not in uniques]一次根据理解计算一个新列表。然后将结果分配给 name uniques。在理解运行期间,uniques是一个空列表,因此测试if item not in uniques总是返回True

在第一个版本中,uniques引用正在积极更新的列表,因此它能够有意义地检查列表中已有的项目。

顺便说一句,这是检查重复项的一种非常低效的方法,因为每次写入时if item not in uniques:,都会在线性时间内检查整个列表。更好的选择是使用 a set,它使用哈希表进行固定时间查找。


以上是不应该像第一个一样输出第二个代码的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>