一句 Python 語言能實現哪些神奇功能?我已經例舉幾十個,還有嗎

一句 Python 語言能實現哪些神奇功能?我已經例舉幾十個,還有嗎

一行 Python 能實現什麼喪心病狂的功能?

愛心(私信小編007自動獲取Python學習資料)

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() 不能用浮點不開心。

一句 Python 語言能實現哪些神奇功能?我已經例舉幾十個,還有嗎

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)])
一句 Python 語言能實現哪些神奇功能?我已經例舉幾十個,還有嗎

八皇后問題

讓開,我要裝逼了。1行python解八皇后,其中一大半代碼是用於打印出來帶格式的。

_=[__import__('sys').stdout.write("\n".join('.' * i + 'Q' + '.' * (8-i-1) for i in vec) + "\n===\n") for vec in __import__('itertools').permutations(xrange(8)) if 8 == len(set(vec[i]+i for i in xrange(8))) == len(set(vec[i]-i for i in xrange(8)))]
一句 Python 語言能實現哪些神奇功能?我已經例舉幾十個,還有嗎

終端路徑切換到某文件夾下

鍵入:

python -m SimpleHTTPServer 8000

然後瀏覽器打開 localhost:8000,一個簡易的web服務就開啟了,我經常用這個來分享實驗室裡的電腦上的目錄,這樣在宿舍也可以方便地獲取想要的資料了。

PS:Windows下通過IIS開個ftp也就幾步,但如果裝了Python,就一行代碼。

lambda

其實,只要你功能不是太大。。。那用lambda都可以包裹到一行。

有一個這樣的庫,可以把你所有python實現,包裹到一行當中,比如這個

x = 3
y = 4
print (x < y < 5)

會下面變成這樣:

(lambda x: (lambda y: print(x

又比如複雜一點的

def guess_my_number(n):
while True:
user_input = raw_input("Enter a positive integer to guess: ")
if len(user_input)==0 or not user_input.isdigit():
print "Not a positive integer!"
else:
user_input = int(user_input)
if user_input > n:
print "Too big! Try again!"
elif user_input < n:
print "Too small! Try again!"
else:
print "You win!"
return True
guess_my_number(42)

會變成下面這樣

(lambda __builtin__: (lambda __print, __y, d: [(lambda ___: None)(d.guess_my_number(42)) for d.guess_my_number in [(lambda n:[(__y(lambda __this: (lambda d: (lambda __after: [(lambda __after: (lambda ___: __after(d))(__print('Not a positive integer!')) if (d.len(d.user_input)==0 or (not d.user_input.isdigit())) else [(lambda __after: (lambda ___: __after(d))(__print('Too big! Try again!')) if d.user_input>d.n else (lambda __after: (lambda ___: __after(d))(__print('Too small! Try again!')) if d.user_input

原理是lambda caculus,看一看也挺好玩的。

爬蟲庫

import requests

對於一個用C++寫過爬蟲的人來說,沒有比這一行更加喪心病狂的了!!!

最經典的還是一行篩質數

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 的使用。strip 和 split 也是處理字符串的常用函數。

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] 對兩個字符串(這裡假設等長)做異或操作。

join 和 zip 的使用。 "".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 這種東西。 暫時就這些,想到再來更新。

一行代碼輸出斐波那契數列

print([x[0] for x in [(a[i][0], a.append([a[i][1], a[i][0]+a[i][1]])) for a in ([[1, 1]], ) for i in range(30)]])

一行代碼實現快排算法

 qsort = lambda arr: len(arr) > 1 and qsort(list(filter(lambda x: x <= arr[0], arr[1:]))) + arr[0:1] + qsort(list(filter(lambda x: x > arr[0], arr[1:]))) or arr 

一行代碼實現數組的flatten功能

將多維數組轉化為一維

 flatten = lambda x: [y for l in x for y in flatten(l)] if isinstance(x, list) else [x] 

一行代碼實現list

有點類似與上個功能的反功能

array = lambda x: [x[i:i+3] for i in range(0, len(x), 3)] 

一行代碼實現求解2的1000次方的各位數之和

print(sum(map(int, str(2**1000))))

小編已經說了幾十個相關例子了,真不相信還有人能說出更多!

一句 Python 語言能實現哪些神奇功能?我已經例舉幾十個,還有嗎


分享到:


相關文章: