我正在尝试做一个简单的 python 程序来删除列表中的所有相邻元素
def main():
a = [1, 5, 2, 3, 3, 1, 2, 3, 5, 6]
c = len(a)
for i in range (0, c-2):
if a[i] == a[i+1]:
del a[i]
c = len(a)
print a
if __name__ == '__main__':
main()
输出是
[1, 5, 2, 3, 3, 2, 3, 5, 6]
没问题!
如果将 a 列表更改为 a = [1, 5, 2, 3, 3, 1, 2, 2, 5, 6]
然后报错
索引列表超出范围
**if a[i] == a[i+1]**
它不应该提示索引超出范围,因为每次它删除列表中的元素时我都在计算 len(a) 。我在这里错过了什么?
最佳答案
for i in range (0, c-2):
这不像某些其他语言中的for
循环;它遍历 range
(一次)返回的列表。当您稍后更改 c
时,它不会影响此循环。
您可以改用while
:
c = len(a)
while i < c - 2:
if a[i] == a[i + 1]:
del a[i]
c = len(a)
else:
i += 1
还有 itertools.groupby
:
import itertools
def remove_consecutive(l):
return (k for k, v in itertools.groupby(l))
关于python-2.7 - 在python中删除列表中的相邻元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23475779/