一行 Python 能实现什么丧心病狂的功能?

兄弟镜像问题 一句 Java 能实现什么丧心病狂的功能? - 编程 一行 JS 能实现什么丧心病狂的功能? - 编程
关注者
9,071
被浏览
1,120,948

135 个回答

print'\n'.join([''.join([('PYTHON!'[(x-y)%7]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)])

range() 不能用浮点不开心。

如何用C语言画一个“心形”? - Milo Yip 的回答

----

Mandelbrot set

print'\n'.join([''.join(['*'if abs((lambda a:lambda z,c,n:a(a,z,c,n))(lambda s,z,c,n:z if n==0else s(s,z*z+c,c,n-1))(0,0.02*x+0.05j*y,40))<2 else' 'for x in range(-80,20)])for y in range(-20,20)])

最经典的还是一行筛质数吧。。

filter(lambda x: all(map(lambda p: x % p != 0, range(2, x))), range(2, n))

一般而言,Python 的 one-liner 要不就是用到了很好用的库,要不就是用到了一些函数式的特性以及 list comprehension 等。

诚然,filter、map、reduce 以及 all、any 这些东西都能用 list comprehension 乃至过程式的写法来替代,但写习惯了以后会发现这样不仅写着爽而且思路更清晰了!

其实大多数时候也说不上丧心病狂,只是用来完成一些小工作比较简短方便。

随便补充几个自己经常用到的:

读取 csv 文件。with 和 list comprehension 的使用。stripsplit 也是处理字符串的常用函数。

with open('t.csv', 'r') as f: rows = [line.strip().split(',') for line in f.readlines()]

对 array 按照第二列降序排序并取前 10 个。匿名函数切片操作的使用。说起来给 sort/sorted 提供 key 会比提供 cmp 要快。(好像 Python 3 里面把 cmp 给取消了)

sorted(array, key=lambda x: x[1], reverse=True)[:10]

对两个字符串(这里假设等长)做异或操作。joinzip 的使用。

"".join([chr(ord(x) ^ ord(y)) for (x, y) in zip(a, b)])

其他的话,要看具体做什么。如果写爬虫,requests 配合 pyquery 不要太好用;写数值处理 / 科学计算 的小脚本,有 numpy 就可以省下许多事。标准库里面像 os、re、random 等都有许多实用的函数。

个人觉得过分追求 one-liner 不完全是一件好事,更重要的是把这些常用的函数弄熟了,写起代码来自然得心应手,充分发挥 Python 写起来爽的优势。同时要经常思考有没有更好的写法,比如我用了很久的 random.randint 才知道原来还有 random.randrange 这种东西。

暂时就这些,想到再来更新。