
在Python中我們往往使用列表生成式來(lái)代替for循環(huán),本文通過(guò)引入實(shí)際例子,來(lái)闡述這背后的原因。
閑話(huà)少說(shuō),我們直接開(kāi)始吧!
列表生成式允許我們?cè)谝恍写a中創(chuàng)建一個(gè)列表并對(duì)其元素執(zhí)行相應(yīng)的操作,這往往使代碼更加簡(jiǎn)潔、更易于閱讀。樣例如下:
【資料圖】
# Using list comprehensionsquares = [x**2 for x in range(10)]print(squares) # prints [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# Using a for loopsquares = []for x in range(10): squares.append(x**2)print(squares) # prints [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
在上面的示例中,列表生成式版本的代碼比??for?
?循環(huán)版本更簡(jiǎn)潔,更容易閱讀。
列表生成式的簡(jiǎn)潔和表達(dá)性可以使代碼更容易理解,尤其是與更復(fù)雜的for循環(huán)相比。舉例如下:
# Using list comprehensioneven_squares = [x**2 for x in range(10) if x % 2 == 0]print(even_squares) # prints [0, 4, 16, 36, 64]# Using a for loopeven_squares = []for x in range(10): if x % 2 == 0: even_squares.append(x**2)print(even_squares) # prints [0, 4, 16, 36, 64]
在上面的示例中,列表生成式版本的代碼更容易理解,因?yàn)樗鼘⒘斜淼膭?chuàng)建和元素的過(guò)濾結(jié)合在一行代碼中。
列表生成式通常比f(wàn)or循環(huán)執(zhí)行時(shí)更加高效,尤其是在處理大型列表時(shí)。舉例如下:
import time# Create a large list of integersnumbers = [x for x in range(1000000)]# Measure the time to create a new list using a for loopstart = time.time()new_list = []for x in numbers: new_list.append(x**2) end = time.time()print(f"For loop took {end - start:.2f} seconds")# Measure the time to create a new list using list comprehensionstart = time.time()new_list = [x**2 for x in numbers]end = time.time()print(f"List comprehension took {end - start:.2f} seconds")
在上面的示例中,列表生成式版本的代碼比f(wàn)or循環(huán)版本更快,尤其是對(duì)于大型列表。
列表生成式允許我們對(duì)列表執(zhí)行廣泛的操作,包括filter、map和transform。舉例如下:
# Using list comprehensionnumbers = [1, 2, 3, 4, 5]even_numbers = [x for x in numbers if x % 2 == 0]# Filtering a listprint(even_numbers) # prints [2, 4]# Mapping a listdouble_numbers = [x * 2 for x in numbers]print(double_numbers) # prints [2, 4, 6, 8, 10]# Transforming a liststring_numbers = [str(x) for x in numbers]print(string_numbers) # prints ["1", "2", "3", "4", "5"]# Combining operationseven_double_string_numbers = [str(x * 2) for x in numbers if x % 2 == 0]print(even_double_string_numbers) # prints ["4", "8"]
在上面的示例中,列表生成式允許大家對(duì)列表??numbers?
?執(zhí)行各種操作,包括過(guò)濾、映射和轉(zhuǎn)換元素。
列表生成式與Python的其他特性一致,例如字典生成式,這可以使其更易于學(xué)習(xí)和使用。例如:
# Using list comprehensionsquares = [x**2 for x in range(10)]print(squares) # prints [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# Using generator expressionsquares = (x**2 for x in range(10))print(squares) # printsat 0x7f9b9f9b4d58># Using dictionary comprehensionsquares = {x: x**2 for x in range(10)}print(squares) # prints {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
在上面的示例中,列表生成式與生成器表達(dá)式和字典生成式一致,它們使用相同的語(yǔ)法,允許大家對(duì)序列和字典執(zhí)行類(lèi)似的操作。這可以使在Python中學(xué)習(xí)和使用這些功能更加容易。
本文分別從簡(jiǎn)潔性,可讀性,效率,靈活性以及功能一致性等五個(gè)方面說(shuō)明了必須掌握Python中列表生成式的原因,同時(shí)給出了相應(yīng)的代碼示例。
您學(xué)廢了嘛?
標(biāo)簽: 更加容易 必須掌握 循環(huán)執(zhí)行