最近在论坛闲逛,先后参与了两题算法趣味题目。
- 题目1是要求算一任意长度字符串中不同的字符以及它的个数。
- 题目2是把一段字符串用“右起竖排”的古文格式输出。
题目难度不大,都是针对字符串的操作,逻辑比较简单,灵活在对不同语言、语法的掌握程度。(原文分别在:1,2。)
看了大家用C++、C#、Java等语言的实现,总感觉牛刀杀鸡太麻烦,有兴趣的朋友可以自己写写看或者直接看原文的网友回复。我最近一段时间Python写的比较多,读到这些题目时候,就有一种跃跃欲试的冲动。因为我知道用Perl,Python,Ruby等动态语言来做这类题目,会是非常理想的。后来我做了这两道题目,结果也令人满意,代码之简洁保持在所有答案的前列。
先看第一题Python解答:
dic = {} for s in "abcdefgabc": dic[s] = 1 if s not in dic else (dic[s]+1) print '\n'.join('%s,%s' % (k, v) for k, v in dic.items())
输出结果:
a,2 c,2 b,2 e,1 d,1 g,1 f,1
Python的四行代码分别做了dictionary的声明,赋值,字符串的遍历,以及高效拼接。
如果还没有看出它的简洁和强大的话,请看第二题的解法:
def main(offset=6):
string = u'静夜思 李白床前明月光,疑似地上霜。举头望明月,低头思故乡。090131'
a = [[' ']*offset for row in xrange(offset)]
for i in xrange(offset):
for j in xrange(offset):
a[i][j] = string[j + i*offset]
b = [[r[col] for r in a[::-1]] for col in xrange(len(a[0]))]
print '\n'.join([u'┊'.join(unicode(c) for c in row)for row in b])
输出结果:
0┊低┊举┊疑┊床┊静
9┊头┊头┊似┊前┊夜
0┊思┊望┊地┊明┊思
1┊故┊明┊上┊月┊
3┊乡┊月┊霜┊光┊李
1┊。┊,┊。┊,┊白
这题如果用C#等实现,代码要在20行以上。下面我简单介绍一下这几行代码:
- 第3行,在Python里面二维“数组”通过嵌套list来实现,这里初始化一个6行6列的二维数组;
- 第7行,我们把“矩阵”顺时针旋转了90度(行列置换,并且对置换后的行首尾对调-这里的::-1就是用来置换一个list的trick);
- 最后一行,我们把数组里的每行中元素,每行之间分别用两个不同字符拼接起来。join方法以及for..in..语句在python中是相当常见的用法。
通过这两题,我们看到Python在处理字符串时候的十分灵活方便,虽然一种语言的好坏不应完全靠是否简洁来衡量,但对于我个人而言,Python是目前我用过的最好的语言。而且对于趣味题来说,这不就是我们解题的趣味所在吗?
标签:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述