引言
在Python編程中,我們常常會(huì)遇到一些需要進(jìn)行大量重復(fù)操作的任務(wù)。這時(shí),使用一行代碼就能夠解決的技巧就顯得非常實(shí)用了。今天,我們就來(lái)學(xué)習(xí)一下Python中17種可以讓你省去一大段代碼的一行代碼技巧。
一、列表推導(dǎo)式
列表推導(dǎo)式是一種快速創(chuàng)建新列表的方法,其基本語(yǔ)法是在一對(duì)方括號(hào)內(nèi),通過(guò)for循環(huán)對(duì)一個(gè)列表中的元素進(jìn)行處理,并將處理結(jié)果加入新的列表中。
例如,我們要從一個(gè)包含整數(shù)的列表中找出所有的偶數(shù),就可以這樣做:
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers) # 輸出:[2, 4, 6]
這段代碼中,[num for num in numbers if num % 2 == 0]就是一個(gè)列表推導(dǎo)式,它的工作原理就是遍歷numbers列表中的每一個(gè)元素num,然后檢查num是否為偶數(shù),如果是,則將其加入到新的列表even_numbers中。
二、生成器表達(dá)式
生成器表達(dá)式與列表推導(dǎo)式類似,也是用來(lái)快速創(chuàng)建新列表的一種方法,但它不是一次性創(chuàng)建出整個(gè)列表,而是一個(gè)一個(gè)地生成結(jié)果。
例如,我們要計(jì)算從1到10的所有數(shù)字的平方,就可以這樣做:
squares = (num ** 2 for num in range(1, 11))
print```python
for square in squares:
print(square)
這段代碼中,(num ** 2 for num in range(1, 11))就是一個(gè)生成器表達(dá)式,它的工作原理就是遍歷range(1, 11)中的每一個(gè)元素num,然后計(jì)算num的平方,并將結(jié)果一次又一次地返回給調(diào)用者。
三、lambda函數(shù)
lambda函數(shù)是一種沒(méi)有名字的匿名函數(shù),它的定義通常只有一行代碼。
例如,我們要定義一個(gè)簡(jiǎn)單的函數(shù),該函數(shù)接受兩個(gè)參數(shù)a和b,然后返回它們的和,我們可以這樣做:
add = lambda a, b: a + b
print(add(1, 2)) # 輸出:3
這段代碼中,lambda a, b: a + b就是一個(gè)lambda函數(shù),它的工作原理就是接收a和b作為輸入,然后返回a+b的結(jié)果。
四、map函數(shù)
map函數(shù)是一個(gè)內(nèi)置函數(shù),它可以接受一個(gè)函數(shù)f和一個(gè)序列s,然后對(duì)s中的每一個(gè)元素都執(zhí)行f,最后返回一個(gè)新的序列。
例如,我們要將一個(gè)列表中的所有元素都加上10,就可以這樣做:
numbers = [1, 2, 3, 4, 5]
new_numbers = map(lambda x: x + 10, numbers)
print(list(new_numbers)) # 輸出:[11, 12, 13, 14, 15]
這段代碼中,map(lambda x: x + 10, numbers)就是一個(gè)map函數(shù),它的工作原理就是將numbers中的每一個(gè)元素x都傳遞給lambda函數(shù),并將結(jié)果加入到一個(gè)新的列表中。
五、filter函數(shù)
filter函數(shù)也是一個(gè)內(nèi)置函數(shù),它可以接受一個(gè)函數(shù)f和一個(gè)序列s,然后對(duì)s中的每一個(gè)元素都執(zhí)行f,如果f返回True,則將這個(gè)元素加入到一個(gè)新的序列中。
例如,我們要找出一個(gè)列表中的所有偶數(shù),就可以這樣做:
numbers = [1, 2, 3, 4, 5]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 輸出:[2, 4]
這段代碼中,filter(lambda x: x % 2 == 0, numbers)就是一個(gè)filter函數(shù),它的工作原理就是對(duì)numbers中的每一個(gè)元素x都執(zhí)行l(wèi)ambda函數(shù),如果lambda函數(shù)返回True,則將這個(gè)元素加入到一個(gè)新的列表中。
六、sorted函數(shù)
sorted函數(shù)是一個(gè)內(nèi)置函數(shù),它可以接受一個(gè)可迭代對(duì)象,并返回一個(gè)新的排序后的列表。
例如,我們要對(duì)一個(gè)列表進(jìn)行排序,就可以這樣做:
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 輸出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
這段代碼中,sorted(numbers)就是一個(gè)sorted函數(shù),它的工作原理就是接受numbers作為輸入,然后返回一個(gè)排序后的列表。
七、enumerate函數(shù)
enumerate函數(shù)是一個(gè)內(nèi)置函數(shù),它可以接受一個(gè)可迭代對(duì)象,并返回一個(gè)新的迭代器,該迭代器可以同時(shí)獲取元素及其索引。
例如,我們要打印一個(gè)列表中每個(gè)元素的索引和值,就可以這樣做:
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(index, fruit) # 輸出:0 apple 1 banana 2 cherry
這段代碼中,for index, fruit in enumerate(fruits):就是一個(gè)enumerate函數(shù),它的工作原理就是接受fruits作為輸入,然后返回一個(gè)新的迭代器,該迭代器可以同時(shí)獲取fruits中每個(gè)元素的索引和值。
八、zip函數(shù)
zip函數(shù)是一個(gè)內(nèi)置函數(shù),它可以接受任意多個(gè)可迭代對(duì)象,然后返回一個(gè)新的迭代器,該迭代器包含了各個(gè)輸入對(duì)象中對(duì)應(yīng)位置的元素。
例如,我們要將兩個(gè)列表中的元素一一對(duì)應(yīng)起來(lái),就可以這樣做:
fruits = ['apple', 'banana', 'cherry']
prices = [1, 2, 3]
zipped = zip(fruits, prices)
print(list(zipped)) # 輸出:[(apple, 1), (banana, 2), (cherry, 3)]
這段代碼中,zip(fruits, prices)就是一個(gè)zip函數(shù),它的工作原理就是接受fruits和prices作為輸入,然后返回一個(gè)新的迭代器,該迭代器包含了fruits和prices中對(duì)應(yīng)位置的元素。
九、itertools模塊itertools模塊是Python的標(biāo)準(zhǔn)庫(kù)之一,其中包含了許多用于生成迭代器的函數(shù)。
例如,我們想要將一個(gè)列表中的元素重復(fù)多次,就可以使用itertools模塊的repeat函數(shù):
import itertools
numbers = [1, 2, 3]
repeated_numbers = itertools.repeat(numbers, 3)
print(list(repeated_numbers)) # 輸出:[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
這段代碼中,itertools.repeat(numbers, 3)就是一個(gè)itertools模塊的函數(shù),它的工作原理就是接收numbers作為輸入,然后生成一個(gè)迭代器,該迭代器可以無(wú)限地重復(fù)numbers中的元素。
十、functools模塊
functools模塊也包含了Python的標(biāo)準(zhǔn)庫(kù)之一,其中包含了一些用于編寫(xiě)高階函數(shù)的工具。
例如,我們想要實(shí)現(xiàn)一個(gè)函數(shù),該函數(shù)接受一個(gè)函數(shù)和一個(gè)參數(shù),然后返回一個(gè)新的函數(shù),新函數(shù)的返回值是原始函數(shù)對(duì)參數(shù)的執(zhí)行結(jié)果。
import functools
def double(x):
return x * 2
tripled = functools.partial(double, 3)
print(tripled()) # 輸出:6
這段代碼中,functools.partial(double, 3)就是一個(gè)functools模塊的函數(shù),它的工作原理就是接收double和3作為輸入,然后返回一個(gè)新的函數(shù)tripped,新函數(shù)的返回值是原始函數(shù)double對(duì)參數(shù)3的執(zhí)行結(jié)果。
十一、operator模塊
operator模塊包含了Python的一些標(biāo)準(zhǔn)運(yùn)算符,如加法、減法、乘法等。
例如,我們想要實(shí)現(xiàn)一個(gè)函數(shù),該函數(shù)接受一個(gè)字符串和一個(gè)字符,然后返回字符串中該字符出現(xiàn)的次數(shù):
import operator
def count_char(s, char):
return operator.count(s, char)
print(count_char('hello world', 'o')) # 輸出:2
這段代碼中,operator.count(s, char)就是一個(gè)operator模塊的函數(shù),它的工作原理就是接收s和char作為輸入,然后返回字符串中char出現(xiàn)的次數(shù)。
以上就是python進(jìn)階的11種高效應(yīng)用,祝大家編程愉快!