Python - 连续字符消除

时间:2017-09-19 19:17:47

标签: python list char duplicates

在python中如果我有列表input = ['>','<','>','<','>','>', '<','<']我不希望在列表中包含连续重复的元素。 例如,新列表将是输入= ['>','<','>','<','>','<'] 我该如何为它编写代码?

我试过

for i in input:
    if(i == i+1):
        delete(i+1)

但是这段代码适用于列表中的整数值。

建议表示赞赏。

5 个答案:

答案 0 :(得分:0)

你很亲密,但你必须遍历range。工作示例:

input = ['>', '<', '>', '<', '>', '>', '<', '<']
indexes_to_delete = []
for i in range(len(input)-1):
    if(input[i] == input[i+1]):
        indexes_to_delete.append(i+1)
for idx in reversed(indexes_to_delete):
    input.pop(idx)
print(input)  # outputs ['>', '<', '>', '<', '>', '<']

i从0变为input的长度减去1,因为最后一个元素没有后续元素。 indexes_to_delete存储要删除的索引,而不是直接删除它们,以避免通过input更改迭代。最后,如果索引按顺序弹出,元素的位置将会移动,因此下一个要删除的索引也必须移动;避免麻烦,以相反的顺序弹出。

答案 1 :(得分:0)

在迭代列表时不要修改列表。最简单的方法是将其复制到新列表中。

output = [input.pop(0)]
while input:
    temp = input.pop(0)
    if not temp == output[-1]:
        output.append(temp)

这可能不是最高效的解决方案,但你明白了。从列表中删除第一个元素,将其与删除的最后一个元素(输出列表中的最后一个元素)进行比较,如果两个元素不同,则添加到输出列表中。重复,直到原始列表为空。

答案 2 :(得分:0)

您可以使用itertools.groupby轻松简洁地完成此操作。

>>> data = ['>', '<', '>', '<', '>', '>', '<', '<']
>>> [x for x, _ in itertools.groupby(data)]
['>', '<', '>', '<', '>', '<']

答案 3 :(得分:0)

使用简单的循环:

lst = ['>', '<', '>', '<', '>', '>', '<', '<']
result = [lst[0]]

for i in lst[1:]:
    if i != result[-1]:
        result.append(i)

print(result)

输出:

['>', '<', '>', '<', '>', '<']

答案 4 :(得分:0)

这个解决方案怎么样,它更加简洁。

import copy
import itertools

l = ['>', '<', '>', '<', '>', '>', '<', '<']

z = copy.deepcopy(l)[1:]

[elem[0] for elem in itertools.izip_longest(l, z) if elem[0] != elem[1]]

['>', '<', '>', '<', '>', '<']