python - 使用列表理解的输出不同于使用 for 循环的输出
问题描述
我最近才开始学习 Python,并且没有编码经验。我正在尝试编写代码,给定一个数字列表,返回另一个(有序)数字列表,而第一个列表中没有任何重复项。
以下代码似乎有效:
nums = [2, 2, 1, 3]
r = []
for i in nums:
if i not in r:
r.append(i)
print(sorted(r))
输出是:
[1, 2, 3]
然后我尝试使用列表理解进行相同的操作,但显然有问题。这是我尝试过的:
nums = [2, 2, 1, 3]
r = []
r = sorted([i for i in nums if i not in r])
print(r)
这是输出:
[1, 2, 2, 3]
我做错什么了?
解决方案
首先,r
不会在您的列表理解 ( [i for i in nums if i not in r]
) 中更新,因此每次检查您的条件时它都会为空。
此外,要使用数字对唯一列表进行排序,请使用 set 如下:
sorted(set(nums))