[英]I'm having trouble figuring out this condensed code
def duplicate_count(s):
return len([c for c in set(s.lower()) if s.lower().count(c)>1])
我很难理解此代码的工作方式。 我正在进行代码战挑战,以返回字符串中重复的元素数量。
例如。 Asasd-> 2
我想出了自己的实现,但我无法真正理解此代码的作用。 如果有人能指出我的方向,将不胜感激:)
首先,这是解决该问题的效率极低的解决方案。 但让我们分解一下:
s.lower()
会将字符串中的所有字符转换为小写:
In [1]: s = "Hello, WORLD" In [2]: s.lower() Out[2]: 'hello, world'
set(s.lower())
将从字符串中创建一个字符集 (确保了解什么是字符集)-消除所有重复项:
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
可帮助我们在字符串中保留多次遇到的字符 [c for c in set(s.lower()) if s.lower().count(c)>1]
称为列表推导 。 基本上,这是创建列表的一种简短方法。 在这里,我们创建了一个字符列表,这些字符在一个字符串中出现多次。 查看有关如何表达和阅读列表理解的主题 。 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
def duplicate_count(s):
result = []
for c in set(s.lower()):
if s.lower().count(c) > 1:
result.append(c)
return len(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.