Python 一行代碼


Python語法十分便捷,通過幾個簡單例子了解其趣味

1、Fizz.Buzz問題為:

打印數字1到100, 3的倍數打印“Fizz”, 5的倍數打印“Buzz”, 既是3又是5的倍數的打印“FizzBuzz”

代碼可以為:

print(" ".join(["fizz"[ x % 3 * 4:] + "buzz"[x % 5 * 4:] or str(x) for x in range(1,101)]))

 其中join可將括號內的列表元素之間加上“ ”

   而"fizz"[ x % 3 * 4:]的意思為,如果冒號左邊的答案大於等於字符長度(“fizz”“buzz”長度為4)則不輸出,如果%3、%5不為0,*4后將等於4,則不輸出

 其實質其實就是列表的切片動作,[x:y:a]意為從x到y以a為間隔拷貝元素,那么如果索引長度大於字符長度,那么自然,無法切片復制,更無法加入列表並輸出了

 

2、一行輸出特定字符拼成的心形:

print('\n'.join([''.join([('LoveAngel'[(x-y) % len('LoveAngel')] 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(30, -30, -1)]))

其中‘loveangel’字段修改后即可顯示不同的字符組成

 

3、輸出99乘法表

print('\n'.join(' '.join('%s*%s=%-2s'%(y,x,x*y) for y in range(1,x+1)) for x in range(1,10)))

 

4、快排算法:

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

 

5、八皇后問題

 

[__import__('sys').stdout.write('\n'.join('.' * i + 'Q' + '.' * (8-i-1) for i in vec) + "\n========\n") for vec in __import__('itertools').permutations(range(8)) if 8 == len(set(vec[i]+i for i in range(8))) == len(set(vec[i]-i for i in range(8)))]

 

6、100以內素數(2ways)

print(' '.join([str(item) for item in filter(lambda x: not [x % i for i in range(2, x) if x % i == 0], range(2, 101))]))
print(' '.join([str(item) for item in filter(lambda x: all(map(lambda p: x % p != 0, range(2, x))), range(2, 101))]))

其中,lambda為匿名函數,

而filter(過濾器),filter()函數包括兩個參數,分別是function和list。該函數根據function參數返回的結果是否為真來過濾list參數中的項,若真則保留,否則被過濾,最后返回一個新列表,如下例所示:

>>>test=[1,2,3]
>>>real=filter(lambda x:x>2, test)
>>>print(real)
>>>[3]

而map函數,map()的兩個參數一個是函數名,另一個是列表或元組,即將后面參數進行函數處理
>>>map(lambda x:x**x, test) 
>>>[1,4,9]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM