久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

簡單的10個Python技巧和竅門

 xiaoyimin 2019-11-29

Python片段,,可以作為您日常工作的參考

Python是增長最快的編程語言,。《福布斯》的最新報告指出,,Python去年增長了456%,。Netflix使用Python,IBM使用Python,,其他數(shù)百家公司都使用Python,。讓我們不要忘記Dropbox。Dropbox也是用Python創(chuàng)建的,。根據(jù)Dice的研究,, Python也是擁有的最熱門的技能之一,并且根據(jù)“編程語言索引的流行度”,,它也是世界上最受歡迎的編程語言,。

與其他編程語言相比,Python提供的一些優(yōu)勢是:

  1. 與主要平臺和操作系統(tǒng)兼容
  2. 許多開源框架和工具
  3. 可讀且可維護的代碼
  4. 強大的標準庫
  5. 標準測試驅(qū)動的開發(fā)

Python技巧和竅門

在本文中,,我將介紹10個有用的代碼提示和技巧,,它們可以幫助您完成日常任務。

1.連接字符串

當需要連接字符串列表時,,可以使用for循環(huán)通過逐個添加每個元素來實現(xiàn)此目的,。然而,,如果列表很長的話這將是非常低效的。在Python中,,字符串是不可變的,,因此對于每一對連接,左,、右字符串都必須復制到新字符串中,。

更好的方法是使用join()如下所示的函數(shù):

characters = ['p', 'y', 't', 'h', 'o', 'n']

word = ''.join(characters)

print(word)

# python

2.使用列表推導

列表推導用于從其他可迭代對象創(chuàng)建新列表。當列表推導返回列表時,,它們由包含表達式的方括號組成,,該表達式針對每個元素以及for循環(huán)遍歷每個元素。列表推導速度更快,,因為它已針對Python解釋器進行了優(yōu)化,,以便在循環(huán)期間發(fā)現(xiàn)可預測的模式。

作為示例,,讓我們使用列表推導找到前五個整數(shù)的平方,。

m = [x ** 2 for x in range(5)]

print(m)

# [0, 1, 4, 9, 16]

現(xiàn)在,讓我們使用列表推導從兩個列表中查找公用數(shù)字

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]

3. enumerate()迭代

Enumerate()方法的作用是向可迭代對象添加一個計數(shù)器,,并以枚舉對象的形式返回它,。

讓我們來解決一個經(jīng)典的編碼面試問題,它通常被稱為Fizz Buzz問題,。

編寫一個程序來輸出列表中的數(shù)字,,以“ 3”的倍數(shù)輸出“fizz”而不是數(shù)字,以“ 5”的倍數(shù)輸出“buzz”,,并以3和5的倍數(shù)輸出“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']

4.在處理列表時使用ZIP

假設(shè)你被分配了一個任務,要把幾個長度相同的列表組合起來并輸出結(jié)果,?同樣,,這里有一個更通用的方法來獲得所需的結(jié)果,利用zip(),,如下面的代碼所示:

countries = ['France', 'Germany', 'Canada']

capitals = ['Paris', 'Berlin', 'Ottawa']

for country, capital in zip(countries,capitals):

print(country, capital)

# France Paris

#Germany Berlin

#Canada Ottawa

5.使用itertools

Python itertools模塊是用于處理迭代器的工具的集合,。itertools具有用于生成可迭代輸入數(shù)據(jù)序列的多種工具。在這里我將使用itertools.combinations()作為一個例子,。itertools.combinations()用于構(gòu)建組合,。這些也是輸入值的可能分組。

讓我們以一個真實的例子來說明以上幾點,。

假設(shè)有四支球隊參加比賽,。在聯(lián)賽階段,每支球隊都要與其他球隊對抗。您的任務是建立所有可能相互比賽的團隊,。

讓我們看一下下面的代碼:

import itertools

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')]

需要注意的重要一點是值的順序無關(guān)緊要,。因為('Team 1', 'Team 2')和('Team 2', 'Team 1')代表同一對,所以輸出列表中將僅包含其中一個,。同樣,,我們可以使用itertools.permutations()模塊中的其他函數(shù)。

6.使用Python Collections

Python Collections是數(shù)據(jù)類型集合,,即列表,,集合,元組,,字典,。Collections模塊提供了可以增強代碼的高性能數(shù)據(jù)類型,使代碼更簡潔,、更簡單,。Collections模塊提供了很多函數(shù)。

Counter()函數(shù)接受一個可迭代的對象(例如列表或元組),,并返回一個Counter Dictionary,。Dictionary的鍵將是迭代器中存在的唯一元素,每個鍵的值將是迭代器中存在的元素的計數(shù),。

要創(chuàng)建一個counter對象,,請將一個iterable (list)傳遞給counter()函數(shù),如下面的代碼所示,。

from collections import Counter

count = Counter(['a','b','c','d','b','c','d','b'])

print(count)

# Counter({'b': 3, 'c': 2, 'd': 2, 'a': 1})

7.將兩個列表轉(zhuǎn)換成字典

假設(shè)我們有兩個列表,,一個列表包含學生的姓名,第二個列表包含他們的分數(shù),。讓我們看看如何將這兩個列表轉(zhuǎn)換為一個字典。使用zip函數(shù),,可以使用以下代碼完成此操作:

students = ['lilei', 'hanmeiemi', 'xiaoming']

marks = [84, 65, 77]

dictionary = dict(zip(students, marks))

print(dictionary)

#{'lilei': 84, 'hanmeiemi': 65, 'xiaoming': 77}

8.使用Python Generators

Generator函數(shù)允許您聲明一個行為類似迭代器的函數(shù),。它們允許程序員以一種快速、簡單和干凈的方式創(chuàng)建迭代器,。讓我們以一個例子來解釋這個概念,。

我們必須遍歷大量數(shù)字(例如100000000),并將所有數(shù)字的平方存儲在單獨的列表中,。

看起來很簡單吧,?使用列表推導很容易做到這一點,但是問題是輸入量很大,。作為示例,,讓我們看下面的代碼:

import memory_profiler

import time

def check_even(numbers):

even = []

for num in numbers:

if num % 2 == 0:

even.append(num*num)

return even

if __name__ == '__main__':

m1 = memory_profiler.memory_usage()

t1 = time.clock()

cubes = check_even(range(100000000))

t2 = time.clock()

m2 = memory_profiler.memory_usage()

time_diff = t2 - t1

mem_diff = m2[0] - m1[0]

print(f'It took {time_diff} Secs and {mem_diff} Mb to execute this method')

#It took 13.6914723 Secs and 1932.2265625 Mb to execute this method

在增加我們需要求和的理想數(shù)時,我們意識到該方法由于更高的計算時間而不可行。這是Python Generator提供幫助的地方,。用括號替換括號后,,我們將Generator推導更改為Generator表達式。現(xiàn)在,,我們來計算花費的時間

import memory_profiler

import time

def check_even(numbers):

for num in numbers:

if num % 2 == 0:

yield num * num

if __name__ == '__main__':

m1 = memory_profiler.memory_usage()

t1 = time.clock()

cubes = check_even(range(100000000))

t2 = time.clock()

m2 = memory_profiler.memory_usage()

time_diff = t2 - t1

mem_diff = m2[0] - m1[0]

print(f'It took {time_diff} Secs and {mem_diff} Mb to execute this method')

#It took 1.34e-05 Secs and 0.01953125 Mb to execute this method

我們可以看到,,所花費的時間已大大減少。對于較大的輸入,,此效果將更加明顯,。生成器僅按需工作,這就是所謂的通過惰性評估工作,。這意味著它們可以節(jié)省CPU,,內(nèi)存和其他計算資源。

9.從函數(shù)返回多個值

Python能夠從函數(shù)調(diào)用中返回多個值,,這是許多其他流行的編程語言所缺少的,。在這種情況下,返回值應為逗號分隔的值列表,,然后Python構(gòu)造一個tuple并將其返回給調(diào)用方,。作為示例,請參見下面的代碼:

def multiplication_division(num1, num2):

return num1*num2, num1/num2

product, division = multiplication_division(15, 3)

print('Product=', product, 'Quotient =', division)

# Product= 45 Quotient = 5.0

10.使用sorted()函數(shù)

在Python中,,使用內(nèi)置的sort()方法對任何序列進行排序非常簡單,,該方法為您完成了所有繁重的工作。sorted()對任何序列(列表,,元組)進行排序,,并始終以排序方式返回包含元素的列表。讓我們以一個示例來對數(shù)字列表進行升序排序,。

sorted([3,5,2,1,4])

# [1, 2, 3, 4, 5]

再舉一個例子,,讓我們以降序和升序?qū)ψ址斜磉M行排序。

sorted(['france', 'germany', 'canada', 'india', 'china'], reverse=True)

# ['india', 'germany', 'france', 'china', 'canada']

sorted(['france', 'germany', 'canada', 'india', 'china'], reverse=False)

# ['canada', 'china', 'france', 'germany', 'india']

結(jié)論

在本文中,,我介紹了10條Python技巧和竅門,,可以將它們用作日常工作的參考。

著作權(quán)歸作者所有

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多