连续重复字母列表中的单词

2024-10-05 14:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

现在我有一个例子清单

data = ['dog','cat','a','aa','aac','bbb','bcca','ffffff']  

我想删除重复字母的单词,其中我想删除单词

'aa','aac','bbb','bcca','ffffff'

也许import re?你知道吗


Tags: importredata字母单词例子cataa
3条回答

循环是一种方式。忘记集合,因为它们不适用于字母重复的单词。你知道吗

以下是一种方法,可用于确定word在单个循环中是否有效:

def is_valid(word):
    last_char = None
    for i in word:
        if i == last_char:
            return False

        last_char = i

    return True

示例

In [28]: is_valid('dogo')
Out[28]: True

In [29]: is_valid('doo')
Out[29]: False

感谢这个线程:Regex to determine if string is a single repeating character

这是重新的版本,但如果任务如此简单,我会坚持PM2环和Tameem的解决方案:

import re
data = ['dog','cat','a','aa','aac','bbb','bcca','ffffff']  
[i for i in data if not re.search(r'^(.)\1+$', i)]

输出

['dog', 'cat', 'a', 'aac', 'bcca']

另一方面:

import re
data = ['dog','cat','a','aa','aac','bbb','bcca','ffffff']  
[i for i in data if not re.search(r'((\w)\2{1,})', i)]

输出

['dog', 'cat', 'a']

这个问题的最初版本想要删除完全由单个字符重复组成的单词。一个有效的方法是使用集合。我们将每个单词转换成一个集合,如果它只包含一个字符,那么这个集合的长度将是1。如果是这样的话,我们可以去掉那个词,除非原来的词是由一个字符组成的。你知道吗

data = ['dog','cat','a','aa','aac','bbb','bcca','ffffff'] 
newdata = [s for s in data if len(s) == 1 or len(set(s)) != 1]
print(newdata)

输出

['dog', 'cat', 'a', 'aac', 'bcca']

下面是新版本问题的代码,您希望删除包含任何重复字符的单词。这个比较简单,因为我们不需要对一个字符的单词进行特殊测试。。你知道吗

data = ['dog','cat','a','aa','aac','bbb','bcca','ffffff'] 
newdata = [s for s in data if len(set(s)) == len(s)]
print(newdata)

输出

['dog', 'cat', 'a']

如果重复必须是连续的,我们可以使用^{}来处理。你知道吗

from itertools import groupby

data = ['dog','cat','a','aa','aac','bbb','bcca','ffffff', 'abab', 'wow'] 
newdata = [s for s in data if max(len(list(g)) for _, g in groupby(s)) == 1]
print(newdata)

输出

['dog', 'cat', 'a', 'abab', 'wow']

相关问题 更多 >