谷歌 Python 课程 | 列表练习 -
给定一个数字列表,返回一个新的列表,其中所有相邻的相等元素都被缩减为单个元素。例如[1, 2, 2, 3] 返回 [1, 2, 3]。你可以创建一个新的列表或修改传入的列表。
我的解决方案(使用一个新列表)是 -
def remove_adjacent(nums):
a = []
for item in nums:
if len(a):
if a[-1] != item:
a.append(item)
else: a.append(item)
return a
问题甚至提出可以通过修改传入的列表来实现。然而,Python文档警告我们不要在使用for循环迭代列表时修改元素。我想知道除了遍历列表之外还有什么可以尝试来完成这个任务。我不是在寻找解决方案,但也许有一个提示可以帮助我朝着正确的方向前进。
更新:
- 根据建议改进了上面的代码。
- 使用建议的提示尝试了while循环的以下方法 -
def remove_adjacent(nums):
i = 1
while i < len(nums):
if nums[i] == nums[i-1]:
nums.pop(i)
i -= 1
i += 1
return nums
<>
,正确的表示法是!=
。使用if a
,而不是if len(a) <> 0
。 - Katriel