【发布时间】:2025-12-17 13:40:01
【问题描述】:
我正在做一些Google Python Class 练习,我正在尝试为以下问题找到pythonic 解决方案。
D.给定一个数字列表,返回一个列表,其中所有相邻的 == 元素已简化为单个元素,因此 [1, 2, 2, 3] 返回 [1, 2, 3]。您可以创建一个新列表或修改传入的 列表。
我的尝试,完美的工作如下:
def remove_adjacent(nums):
result = []
for num in nums:
if len(result) == 0 or num != result[-1]:
result.append(num)
return result
例如,remove_adjacent([2, 2, 3, 3, 3]) 的输出是[2, 3]。一切正常。
我正在尝试使用列表推导以便以更 pythonic 的方式对其进行归档,所以我的尝试如下:
def remove_adjacent(nums):
result = []
result = [num for num in nums if (len(result)==0 or num!=result[-1])]
return result
这个,同样的输入[2, 2, 3, 3, 3],输出是[2, 2, 3, 3, 3](同样)。呸!错了。
我对列表推导做错了什么?我是否正在尝试做一些列表推导无法做到的事情?我知道初始化列表 (result = []) 有点奇怪,所以在这种情况下使用列表推导可能不太可能。
【问题讨论】:
-
仅供参考,
list(set([2, 2, 3, 3, 3]))将返回[2, 3]。但是,这只会将列表缩减为一组唯一的值。它不一定会删除相邻的重复项。 -
你从哪里得到
res变量 -
另外,
res应该是result -
@VigneshKalai 这是
result,而不是res。我的错误是复制代码。 -
@Borja 那么你将得到相同的数字,因为 len(result) 将等于 0 直到列表理解结束
标签: python python-2.7 list-comprehension