题解 | #字符个数统计#

字符个数统计

http://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50

python一行代码解决,然而看着别的语言要写好几行。真不知道应该觉得是在耍流氓还是应该觉得是优越感(手动狗头)?

print(len(set(input().replace('\n',''))))

还有小伙伴问我看清楚题了吗?意思是题目要求编写一个函数,好吧,既然如此,就耍赖到底(再次狗头)

print(len(set(map(lambda x: x, input().replace('\n','')))))

lambda真是个好东西 :)

全部评论
print(len(set(input())))
3 回复 分享
发布于 2023-05-13 01:31 浙江
主要是输入端就控制好了数据范围在0-127之间,所以就不用再去写个语句判断数据合法性。不然这样写是有概率会报错的。
1 回复 分享
发布于 2022-02-15 12:51
print(len([i for i in set(input().replace('\n','')) if 0<=ord(i)<=127]))这样应该更完善了
18 回复 分享
发布于 2022-05-01 16:54
输入已经确定有效那就可以,换行都不用考虑了print(len(set(input())))就搞定了
6 回复 分享
发布于 2022-02-16 07:21
s = set(input().replace('\n', '')) count = 0 for v in s: if 0 <= ord(v) <= 127: count += 1 if count == 128: break print(count)
5 回复 分享
发布于 2022-05-20 22:51
这个代码会出现问题,如果输入不是0-127这个还是会报错
2 回复 分享
发布于 2022-01-23 20:50
比如”7dd89\n7\n8"算不算合法输入,是的话,结果不对
2 回复 分享
发布于 2022-06-20 11:42
大哥,你看清楚题目了吗?......
点赞 回复 分享
发布于 2022-03-04 23:43
写多行的意义就在于判断是否是在[0,127]范围内,不然输入直接set()肯定更快啊........
点赞 回复 分享
发布于 2022-07-19 23:31
大佬,我为什么就想不到,佩服
点赞 回复 分享
发布于 2022-08-05 14:57
上面的代码可以直接replace,为什么下面的代码要用lambda函数?直接replace不行吗?
点赞 回复 分享
发布于 2022-08-19 16:43 广东
为什么你们都这么牛啊 羡慕了
点赞 回复 分享
发布于 2022-09-16 00:01 广东
那输入是汉字呢
点赞 回复 分享
发布于 2023-01-07 23:03 陕西
牛逼轰轰非要特意一行代码,多些几行难道就low吗?
点赞 回复 分享
发布于 2024-12-09 18:46 上海
print(len(set(list(str(input())))))
点赞 回复 分享
发布于 2024-12-16 11:31 北京
1. print(len(set(input().replace('\n','')))) 解释: input(): 读取用户输入的字符串,input() 函数会返回一个字符串。 replace('\n',''): replace() 是字符串方法,它会将所有的换行符(\n)替换为空字符串。通常,input() 本身不会带有换行符,但是如果多行输入会有换行符,因此这里去掉换行符的做法是预防性的。 set(): set() 函数用于将输入字符串转换为一个集合。集合会自动去除重复的字符,只保留每个字符的一个实例。 len(): len() 函数用于计算集合中元素的个数,返回的是不同字符的数量。 总结: 这个代码行的核心作用是计算输入字符串中去掉重复后所有字符的个数。但是,它并没有检查字符的 ASCII 范围是否在 33 到 126 之间。
点赞 回复 分享
发布于 02-26 02:13 海南
2. print(len(set(map(lambda x: x, input().replace('\n',''))))) 解释: input().replace('\n',''): 这部分与第一行相同,去掉字符串中的换行符。 map(lambda x: x, ...): map() 是一个函数,通常用来对可迭代对象中的每个元素应用某个函数。在这里,lambda x: x 是一个恒等函数,即它返回输入的每个字符,等效于对每个字符不做任何修改。 其实在这个例子中,map(lambda x: x, ...) 是不必要的,因为它只会返回输入的每个字符本身。 set(): 这里使用 set() 来去除重复字符,和之前的行相同。 len(): 计算集合中不同字符的个数。 总结: 与第一行代码非常相似,只是加了一些不必要的操作(map(lambda x: x, ...)),最终效果是一样的,依然没有对 ASCII 范围进行筛选。
点赞 回复 分享
发布于 02-26 02:17 海南
改进版代码: 一个更简洁、有效的版本是:print(len([x for x in set(input().replace('\n','')) if 33 <= ord(x) <= 126])) 解释: input().replace('\n',''):去掉换行符。 set():去除重复字符。 [x for x in ... if 33 <= ord(x) <= 126]:列表推导式遍历集合,过滤出 ASCII 范围在 33 到 126 之间的字符。 len():计算最终列表中不同字符的个数。
点赞 回复 分享
发布于 02-26 02:41 海南

相关推荐

bLanK的小号:建议自己写一个比较新颖的项目,比如思维导图,在线文档,仿造postman,仿造一个组件库
点赞 评论 收藏
分享
评论
104
28
分享

创作者周榜

更多
牛客网
牛客企业服务