1000個讀者心中有1000個哈姆雷特,要問1000個程序員“什麼纔是最好的語言”,Java、Python、PHP、C++ 也都有自己的位置。但要問編程語言流行指數之王非,那真的非Python莫屬了。
據Stack Overflow數據顯示,Python是使用量增長比較快的編程語言。
福布斯新發布的一篇報告指出,python的使用量在去年增長了456%。Netfix、IBM以及其它數以百計的公司都在使用python。包括Dropbox也是由python創建的。Dice的研究表明,python是世界上最熱門的技巧之一,根據編程語言的流行度指數來看,python同時也是很受歡迎的編程語言。
Python爲何有如此大的魅力呢?
那是因爲,與其它編程語言相比,Python有以下5點優勢:
1、和主流平臺、操作系統兼容。
2、包含許多開源框架和工具。
3、編碼具有可讀性和可維護性
4、強大的標準庫
5、標準的測試驅動開發
較低的學習門檻和廣闊的發展前景使得Python越來越受歡迎。今天,小芯就繼續給大家帶來有關python非常有用的10個代碼小技巧,幫助你完成日常工作,請注意查收和學習喲~
10個Python小技巧
1. 用ZIP處理列表
假設要合併相同長度的列表並打印結果。同樣有一種更通用的方式,即用zip()函數獲得想要的結果,代碼如下:
countries= ['France', 'Germany', 'Canada']
capitals = ['Paris', 'Berlin', 'Ottawa']
for country, capital in zip(countries,capitals):
print(country, capital) # FranceParis
GermanyBerlin
CanadaOttawa
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
2. 使用python collections
Python collections是容器數據類型,即列表、集合、元組、字典。Collections模塊提供了可以增強代碼的高性能數據類型,使工作更加簡潔容易。它還提供了許多功能,以下使用Counter() 函數進行演示。
Counter() 函數採用一個可迭代對象(如列表或元組),並返回一個Counter字典。字典的鍵是迭代器中唯一存在的元素,每個鍵的值是該元素在迭代器中出現次數的計數。
爲創建一個Counter對象,將一個迭代的(列表)傳遞給Counter()函數,代碼如下。
fromcollections import Countercount = Counter(['a','b','c','d','b','c','d','b'])
print(count) # Counter({'b': 3, 'c': 2, 'd': 2, 'a': 1})
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
3. 使用itertools
Python的itertools模塊是用於處理迭代器的工具集合。Itertools包含多種工具,用於生成輸入數據的可迭代結果。這裏以itertools.combinations()爲例。itertools.combinations()用於構建組合。這些是輸入量的可能組合項。
舉一個現實中的例子來闡明以上觀點:
假設一個錦標賽中有4個隊伍,在聯賽階段,每個隊伍都要與其他每個隊伍進行比賽。任務是列出所有比賽隊伍的可能組合。
代碼如下:
importitertools
friends = ['Team 1', 'Team 2', 'Team 3', 'Team 4']
list(itertools.combinations(friends, r=2)) # [('Team 1', 'Team 2'), ('Team 1', 'Team 3'), ('Team 1', 'Team 4'), ('Team 2', 'Team 3'), ('Team 2', 'Team 4'), ('Team 3', 'Team 4')]
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
需要注意的是,值的順序不重要。因爲('Team 1', 'Team 2')和('Team 2', 'Team 1')代表同一對,所以輸出列表只需包含其中一個。相似的,可以使用itertools.permutations()以及來自該模塊的其他函數。如需更完整的參考資料,請查閱此教程。
4. 從函數中返回多個值
Python可從函數調用中返回多個值,這是許多其他流行編程語言所不具備的功能。在這種情況下,返回值應爲逗號分隔的值列表,然後python構造一個元組並返回給調用方。代碼示例如下:
defmultiplication_division(num1, num2):
return num1*num2, num1/num2product,division = multiplication_division(15, 3)
print("Product=", product, "Quotient =", division) #Product= 45 Quotient = 5.0
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
5. 使用列表推導式
列表推導式用於從其他可迭代對象中創建新列表。列表推導式返回列表時,由包含表達式的方括號組成,該表達式對於每個元素以及用於循環遍歷每個元素的for循環執行。由於對python解釋器進行了優化,可以在循環期間發現可預測的模式,因此列表推導速度更快。
如下,使用列表推導式計算前五個整數的平方:
m = [x** 2 for x in range(5)]
print(m) # [0, 1, 4, 9, 16]
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
再如,使用列表推導式查找兩個列表中的公共數字
list_a =[1, 2, 3, 4]
list_b = [2, 3, 4, 5]
common_num = [a for a in list_a for b in list_b if a == b]
print(common_num) # [2, 3, 4]
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
6. 將兩個列表轉換爲一個字典
假設有兩個列表,一個列表內容爲學生姓名,另一個內容爲學生分數。使用zip函數,將這兩個列表轉換爲一個字典,代碼如下:
students= ["Peter", "Julia", "Alex"]
marks = [84, 65, 77]
dictionary = dict(zip(students, marks))
print(dictionary) # {'Peter': 84, 'Julia': 65, 'Alex': 77}
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
7. 字符串拼接
拼接字符串時可用for循環來逐個添加元素,但這非常低效(特別是當列表很長時)。在python中,字符串是不可變的,因此拼接字符串時,必須將左、右字符串複製到新的字符串中。
更好的方法是使用join() 函數,如下所示:
characters= ['p', 'y', 't', 'h', 'o', 'n']
word = "".join(characters)
print(word) # python
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
8. 使用sorted()函數
在python中使用內置函數sorted()可以輕而易舉地對任何序列進行排序,它能完成很多艱難的工作。sorted()可對任何序列(列表、元組)進行排序,並返回已排序的元素列表。如下對數字進行升序排列:
sorted([3,5,2,1,4])# [1, 2, 3, 4, 5]
如下對字符串進行降序排列:
sorted(['france','germany', 'canada', 'india', 'china'], reverse=True) # ['india', 'germany','france', 'china', 'canada']
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
9. 用enumerate()迭代
Enumerate()方法向可迭代對象添加一個計數器,並以枚舉對象的形式返回。
以下是一個經典的編碼方面的面試問題(通常被稱爲Fizz Buzz問題)。
編寫一個程序來打印列表中的數字。若數字是3的倍數,輸出“fizz”;是5的倍數,輸出“buzz”;既是3又是5的倍數,輸出“fizzbuzz”。
numbers= [30, 42, 28, 50, 15]
for i, num in enumerate(numbers):
if num % 3 == 0 and num % 5 == 0:
numbers[i] = 'fizzbuzz'
elif num % 3 == 0:
numbers[i] = 'fizz'
elif num % 5 == 0:
numbers[i] = 'buzz'
print(numbers) # ['fizzbuzz', 'fizz', 28, 'buzz', 'fizzbuzz']
10. 使用python generators(生成器)
generator函數允許創建類似迭代器的函數。他們允許程序員以一種簡單快速的方式創建迭代器。下面通過一個例子來解釋這個概念。
假設要對從1開始的前100000000個完全平方數求和。
看起來很容易對吧。使用列表推導式可以很輕鬆的做到這一點,但是它的輸入量過大。下面爲一示例:
t1 =time.clock()
sum([i * i for i in range(1, 100000000)])
t2 = time.clock()
time_diff = t2 - t1
print(f"It took {time_diff} Secs to execute this method") # Ittook 13.197494000000006 Secs to execute this method
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
在增加求和的完全平方數時,由於需要大量計算時間,這種方法並不夠靈活。這時python生成器就派上用場了。將方括號替換爲圓括號後,列表推導式更改爲生成器表達式。現在計算花費的時間:
【python學習qq裙:10667510 送入門學習資料,萌新程序媛大本營】
t1 = time.clock()
sum((i * i for i in range(1, 100000000)))
t2 = time.clock()
time_diff = t2 - t1
print(f"It took {time_diff} Secs to execute this method") # Ittook 9.53867000000001 Secs to execute this method
如上,所花費時間已大大減少。輸入量越大,減少效果越顯著。
小結:
隨着人工智能的逐漸升溫,Python作爲人工智能領域開發的首選語言,其地位也將越來越重要。以前的“學好數理化,走遍天下都不怕”,如今可能要改口了——“學好python,走遍天下都不怕”。
所以,還在等什麼,趕緊學會這10種實用的python小技巧,相信你的日常工作會更加666~