谷歌 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
原文由 Vaibhav Bajpai 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用生成器迭代列表的元素,并且
yield
只有在它发生变化时才生成一个新元素。itertools.groupby
正是这样做的。如果您遍历一个副本,您可以修改传入的列表: