def duplicate_count(s):
return len([c for c in set(s.lower()) if s.lower().count(c)>1])
我很难理解这段代码的工作原理。我正在做一个代码战挑战,以返回字符串中重复元素的数量。
例如。阿萨德 --> 2
我想出了自己的实现,但我无法真正理解这段代码的作用。如果有人能指出我的方向,我将不胜感激:)
请您参考如下方法:
首先,这是一个非常低效的问题解决方案。但让我们分解一下:
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 条件:
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()然后让我们得到列表的长度
总而言之,您遍历给定字符串中的唯一字符,并计算其中哪些字符在字符串中出现超过一次。
