我很难找出这个精简代码

def duplicate_count(s): 

return len([c for c in set(s.lower()) if s.lower().count(c)>1])

我很难理解这段代码的工作原理。我正在做一个codewars挑战,以返回字符串中重复元素的数量。我很难找出这个精简代码

例如。 Asasd - > 2

我想出了我自己的暗示,但我无法真正理解这段代码的作用。如果有人可以指出我的方向,它将不胜感激:)

回答:

它返回重复字符的数量(如函数名称暗示) set(s.lower())给出字符串中的唯一字母。 杉木在本组中的每个字母,如果该信字符串中的出现次数大于1,存在重复,因此计数被递增

s="aaabbcdd" 

print(set(s.lower()))

#{'a', 'b', 'd', 'c'}

count=0

for c in set(s.lower()):

if(s.lower().count(c)>1):

print("charcter with more than 1 occurence : ",c)

print("\toccurences : ",s.lower().count(c))

count=count+1

print("count : ",count)

# charcter with more than 1 occurence : a

# occurences : 3

# charcter with more than 1 occurence : d

# occurences : 2

# charcter with more than 1 occurence : b

# occurences : 2

# count : 3

回答:

def duplicate_count(s): 

result = []

for c in set(s.lower()):

if s.lower().count(c) > 1:

result.append(c)

return len(result)

回答:

是这样的,首先,一个的解决这个问题的效率非常低。但是,让我们来分析一下:

  • s.lower()将所有字符转换成字符串为小写:

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

    In [2]: s.lower()

    Out[2]: 'hello, world'

  • set(s.lower())将一个(请务必阅读有关集)的set创建字符串中的字符 - 删除所有重复项:

    In [3]: set(s.lower()) 

    Out[3]: {' ', ',', 'd', 'e', 'h', 'l', 'o', 'r', 'w'}

  • for c in set(s.lower())迭代我们创建的集合中的每个字符都是
  • 对于此集合中的每个字符,我们在条件为if s.lower().count(c)>1的情况下应用此项。 count(c)这里将计算c在字符串中出现的次数。 >1帮助我们留下字符串中遇到超过1次的字符
  • [c for c in set(s.lower()) if s.lower().count(c)>1]被称为list comprehension。这基本上是创建列表的简短方式。在这里,我们创建一个字符串列表,不止一次出现在一个字符串中。退房this topic about how to verbalize and read the list comprehensions
  • len()然后就得到我们的名单

总结的长度,你遍历一个给定的字符串中唯一的字符和计数这其中发生在一个字符串超过一次。

回答:

set(s.lower()) # gives unique elements in lower case 

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

总而言之函数发现在一个字符串不是唯一的元素数量,忽略大小写。

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

In [7]: from collections import Counter 

In [8]: sum(v > 1 for v in Counter("Aabcc".lower()).values())

Out[8]: 2

以上是 我很难找出这个精简代码 的全部内容, 来源链接: utcz.com/qa/260654.html

回到顶部