Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 连续重复字母列表中的单词_Python_Regex - Fatal编程技术网

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

Python 连续重复字母列表中的单词,python,regex,Python,Regex,现在我有一个列表,例如 data = ['dog','cat','a','aa','aac','bbb','bcca','ffffff'] 我想删除带有重复字母的单词,我想删除其中的单词 'aa','aac','bbb','bcca','ffffff' 也许import re?这个问题的原始版本想要删除完全由单个字符重复组成的单词。一种有效的方法是使用集合。我们将每个单词转换成一个集合,如果它只包含一个字符,那么这个集合的长度将是1。如果是这样的话,我们可以删除这个词,除非原来的词只有一

现在我有一个列表,例如

data = ['dog','cat','a','aa','aac','bbb','bcca','ffffff']  
我想删除带有重复字母的单词,我想删除其中的单词

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

也许
import re

这个问题的原始版本想要删除完全由单个字符重复组成的单词。一种有效的方法是使用集合。我们将每个单词转换成一个集合,如果它只包含一个字符,那么这个集合的长度将是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']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']

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

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', 'aac', 'bcca']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']

如果重复必须是连续的,我们可以使用

输出

['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['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']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']

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

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', 'aac', 'bcca']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']

如果重复必须是连续的,我们可以使用

输出

['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
一行就够了:)

输出

['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
一行就够了:)

输出

['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
多亏了这条线索:

这是重新版本,但如果任务如此简单,我会坚持使用PM2 ring和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']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
另一方面:

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', 'aac', 'bcca']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
多亏了这条线索:

这是重新版本,但如果任务如此简单,我会坚持使用PM2 ring和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']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']
另一方面:

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', 'aac', 'bcca']
['dog', 'cat', 'a']
['dog', 'cat', 'a', 'abab', 'wow']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a', 'aac', 'bcca']
['dog', 'cat', 'a']

循环是一条路要走。忘记集合,因为它们不适用于具有重复字母的单词

以下是一种可用于确定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

循环是一条路要走。忘记集合,因为它们不适用于具有重复字母的单词

以下是一种可用于确定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

下面是一种检查是否存在连续重复字符的方法:

def has_consecutive_repeated_letters(word):
    return any(c1 == c2 for c1, c2 in zip(word, word[1:]))
然后,您可以使用列表理解来筛选您的列表:

words = ['dog','cat','a','aa','aac','bbb','bcca','ffffff', 'abab', 'wow']
[word for word in words if not has_consecutive_repeated_letters(word)]
# ['dog', 'cat', 'a', 'abab', 'wow']

下面是一种检查是否存在连续重复字符的方法:

def has_consecutive_repeated_letters(word):
    return any(c1 == c2 for c1, c2 in zip(word, word[1:]))
然后,您可以使用列表理解来筛选您的列表:

words = ['dog','cat','a','aa','aac','bbb','bcca','ffffff', 'abab', 'wow']
[word for word in words if not has_consecutive_repeated_letters(word)]
# ['dog', 'cat', 'a', 'abab', 'wow']


对不起,我做了编辑。不是从第一个字符开始,而是存在重复字母的任何地方请不要在收到有效答案后更改您的问题,因为更改会使这些答案无效!您可能希望在问题中添加标题中的“连续重复”,并添加一个类似“abab”的词,以明确(假设我是对的)您希望保留标题。不要再中途编辑问题。如果您继续这样做,您的帖子将被关闭。在其他人花时间解决您的原始查询后更改您的问题是非常不尊重他们的时间的。抱歉,进行了编辑。不是从第一个字符开始,而是存在重复字母的任何地方请不要在收到有效答案后更改您的问题,因为更改会使这些答案无效!您可能希望在问题中添加标题中的“连续重复”,并添加一个类似“abab”的词,以明确(假设我是对的)您希望保留标题。不要再中途编辑问题。如果您继续这样做,您的帖子将被关闭。在别人花了时间来解决你原来的疑问之后,改变你的问题对他们的时间是不敬的。SET不考虑单词中的重复字母,所以这是不够的。PM2Ring是的,投了赞成票。但是,我认为OP从开始时就不清楚他的问题的多个时间。SET不考虑单词中的重复字母,所以这是不够的。PM2Ring是的,投了赞成票。但是我认为OP从一开始就不清楚他的问题的内容。他不熟悉正则表达式,所以现在可能只使用循环和集合。@JieNiu,但这就是你错的地方。如果您有更多这样的任务,Regex是唯一可以执行这些任务的地方go@JieNiu您选择的答案不能处理像
'wow'
酷这样的词。我们将查看Regex上的引用。谢谢。@AntonvBR:这不是“唯一可以去的地方”,但它确实是一个非常强大的工具。不熟悉正则表达式,所以现在可能只使用循环和集合。@JieNiu,但这就是你错的地方。如果您有更多这样的任务,Regex是唯一可以执行这些任务的地方go@JieNiu您选择的答案不能处理像
'wow'
酷这样的词。我们将查看Regex上的引用。谢谢。@AntonvBR:这不是“唯一的去处”,但它确实是一个非常强大的工具。