Python 我搞不懂这个压缩代码

Python 我搞不懂这个压缩代码,python,python-3.x,Python,Python 3.x,我很难理解这段代码是如何工作的。我在做一个codewars挑战,返回字符串中重复元素的数量 例如Asasd->2 我提出了自己的实现,但我无法真正理解这段代码的作用。如果有人能为我指明方向,我将不胜感激:首先,这是一个效率极低的问题解决方案。但让我们把它分解一下: def duplicate_count(s): return len([c for c in set(s.lower()) if s.lower().count(c)>1]) 将字符串中的所有字符转换为小写: def

我很难理解这段代码是如何工作的。我在做一个codewars挑战,返回字符串中重复元素的数量

例如Asasd->2


我提出了自己的实现,但我无法真正理解这段代码的作用。如果有人能为我指明方向,我将不胜感激:

首先,这是一个效率极低的问题解决方案。但让我们把它分解一下:

def duplicate_count(s):
    return len([c for c in set(s.lower()) if s.lower().count(c)>1])
将字符串中的所有字符转换为小写:

def duplicate_count(s):

    result = []

    for c in set(s.lower()):
        if s.lower().count(c) > 1:
            result.append(c)

    return len(result)
sets.lower将创建一个确保阅读字符串中字符集的信息-消除所有重复项:

In [1]: s = "Hello, WORLD"

In [2]: s.lower()
Out[2]: 'hello, world'
对于集合中的c,lower将迭代上面创建的集合中的每个字符 对于这个集合中的每个字符,我们应用这个if条件:if s.lower.countc>1。这里的countc将计算c在字符串中出现的次数。>1帮助我们在字符串中保留多次遇到的字符 [c代表集合中的c.lower,如果s.lower.countc>1]称为a。这基本上是创建列表的一种简单方法。这里,我们创建一个字符串中多次出现的字符列表。退房 然后len会告诉我们名单的长度
总而言之,您可以迭代给定字符串中的唯一字符,并多次计算其中哪些字符出现在字符串中。

首先,这是一个效率极低的问题解决方案。但让我们把它分解一下:

In [3]: set(s.lower())
Out[3]: {' ', ',', 'd', 'e', 'h', 'l', 'o', 'r', 'w'}
将字符串中的所有字符转换为小写:

def duplicate_count(s):

    result = []

    for c in set(s.lower()):
        if s.lower().count(c) > 1:
            result.append(c)

    return len(result)
sets.lower将创建一个确保阅读字符串中字符集的信息-消除所有重复项:

In [1]: s = "Hello, WORLD"

In [2]: s.lower()
Out[2]: 'hello, world'
对于集合中的c,lower将迭代上面创建的集合中的每个字符 对于这个集合中的每个字符,我们应用这个if条件:if s.lower.countc>1。这里的countc将计算c在字符串中出现的次数。>1帮助我们在字符串中保留多次遇到的字符 [c代表集合中的c.lower,如果s.lower.countc>1]称为a。这基本上是创建列表的一种简单方法。这里,我们创建一个字符串中多次出现的字符列表。退房 然后len会告诉我们名单的长度 总而言之,您迭代给定字符串中的唯一字符,并多次计算其中哪些字符出现在字符串中

In [3]: set(s.lower())
Out[3]: {' ', ',', 'd', 'e', 'h', 'l', 'o', 'r', 'w'}

总之,函数在字符串中查找非唯一元素的数量,忽略大小写

我相信使用collections.Counter更有效:

s.lower().count(c)>1 #checks if an element shows up more than once

总之,函数在字符串中查找非唯一元素的数量,忽略大小写

我相信使用collections.Counter更有效:

s.lower().count(c)>1 #checks if an element shows up more than once

阅读文档中的列表理解您不理解自己的代码?阅读文档中的列表理解您不理解自己的代码?可能值得将Aabcc中的x替换为Aabcc中的x.lower。lower可能值得将Aabcc中的x.lower替换为Aabcc中的x.lower。lower