相关疑难解决方法(0)

删除在Python中具有连续重复项的元素

我对这个问题很好奇:消除列表元素的连续重复,以及如何在Python中实现它.

我想出的是:

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
    else:
        i = i+1
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3, 4, 5, 1, 2]
Run Code Online (Sandbox Code Playgroud)

我觉得还可以.

所以我很好奇,想看看我是否可以删除连续重复的元素并获得此输出:

[2, 3, 5, 1, 2]
Run Code Online (Sandbox Code Playgroud)

为此我做了这个:

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0
dupe = False

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
        dupe = True
    elif dupe:
        del list[i]
        dupe = False
    else:
        i += 1
Run Code Online (Sandbox Code Playgroud)

但它似乎有点笨拙而不是pythonic,你有更智能/更优雅/更有效的方式来实现它吗?

python list duplicates

37
推荐指数
3
解决办法
2万
查看次数

如何使用列表推导删除列表中的相邻重复元素?

有没有办法在python中使用列表推导来过滤列表中的相邻重复项?

这是我的意思的一个例子:

>>> xs = [1,2,2,3]
>>> print added.reAdj(xs)
[1,2,3]
Run Code Online (Sandbox Code Playgroud)

通过SE进行的搜索揭示了早先的一个问题,询问了一个类似但略有不同的问题:是否可以从列表中删除所有重复项,而不是明确要求涉及列表推导的解决方案.使用列表推导的动机特别在于认识到它们优于传统for循环的优点.用户建议使用set()函数或标准循环:

result = []
most_recent_elem = None
for e in xs:
    if e != most_recent_elem:
        result.append(e)
        most_recent_elem = e
Run Code Online (Sandbox Code Playgroud)

set()建议无法满足任务,因为删除了非相邻重复项,而循环有效但冗长.

这似乎是一种安全地引用列表推导中的下一个元素的方法,如下所示.

[x for x in xs if x != **x.next()**]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python list-comprehension list

20
推荐指数
3
解决办法
4019
查看次数

Python - 重启for循环的方法,类似于while循环的"continue"?

基本上,我需要一种方法将控制返回到for循环的开头,并且如果满足某个条件,则在采取操作后实际重新启动整个迭代过程.

我想要做的是这样的:

    for index, item in enumerate(list2):
    if item == '||' and list2[index-1] == '||':
        del list2[index]
        *<some action that resarts the whole process>*
Run Code Online (Sandbox Code Playgroud)

这样,如果['berry','||','||','||','pancake'在列表中,我将结束:

['berry','||','pancake']相反.

谢谢!

python loops for-loop continue

10
推荐指数
3
解决办法
6万
查看次数

如何从列表中的相似项目集合中保留唯一项目?

我有一个如下所示的列表

a = [5,5,5,5,3,3,2,2,2,2,5,5,5,2,2,2,2,2]
Run Code Online (Sandbox Code Playgroud)

我希望有以下输出列表

b = [5,3,2,5,2]
Run Code Online (Sandbox Code Playgroud)

请注意,我曾尝试使用

list(OrderedDict.fromkeys(a))
Run Code Online (Sandbox Code Playgroud)

这给了我

[5, 3, 2]
Run Code Online (Sandbox Code Playgroud)

请注意,它不考虑第 2 个 5 或第 2 个 2,因为到那时它们是非唯一的。

我需要一种方法让机器理解当它遇到一个唯一元素(比如第一个“5”)时,它应该将它存储在列表 b 中。因此,当它遇到第一个 '3' 或第一个 '2' 时,它也应该将它们存储在列表 b 中。到目前为止没有问题。当它遇到第二组“5”时,它应该将该 5 作为新元素存储在列表 b 中。第二组 2 也是如此。

有没有 Pythonic 的方法来做到这一点?

python list python-3.x

0
推荐指数
1
解决办法
359
查看次数