自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一文帶您精通 Python 列表:操作方法、技巧與最佳實(shí)踐

開(kāi)發(fā) 前端
探討了Python列表的多種方法與技巧,從基本操作如添加、刪除和訪問(wèn)元素,到高級(jí)技巧如列表推導(dǎo)式、嵌套列表和函數(shù)式編程方法。理解淺拷貝和深拷貝的區(qū)別、合理使用列表推導(dǎo)式等優(yōu)化技巧,有助于提高編程效率和簡(jiǎn)化數(shù)據(jù)處理。掌握這些方法對(duì)于數(shù)據(jù)科學(xué)、數(shù)據(jù)分析的編程至關(guān)重要。?

列表(list)是 Python 中最常見(jiàn)且最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)之一,它是一個(gè)存儲(chǔ)對(duì)象的容器,可以包含任何類型的對(duì)象,包括字符串、數(shù)字,甚至其他對(duì)象。列表還可以混合存儲(chǔ)不同類型的數(shù)據(jù)。掌握列表的各種操作,如創(chuàng)建、添加、排序等,不僅可以提高編程效率,還能簡(jiǎn)化數(shù)據(jù)處理過(guò)程。

基本操作

接下來(lái)將了解添加、移除或訪問(wèn)列表元素的不同方法。從添加元素的方法開(kāi)始。

添加元素

可以使用 append() 方法在列表末尾添加一個(gè)元素,或者使用 insert() 方法在指定位置添加一個(gè)元素。對(duì)于添加多個(gè)元素,最好的方法是使用 extend()。

fruits = ['apple', 'banana']


# Adds at the end
fruits.append('cherry')  
fruits

圖片圖片

# Inserts at position 1
fruits.insert(1, 'orange') 
fruits

圖片圖片

# Adds multiple items
fruits.extend(['date', 'elderberry',100])
fruits

圖片圖片

  • append() 和 extend() 在各自的用途上都很高效。append() 具有常數(shù)時(shí)間復(fù)雜度,使其在添加單個(gè)元素時(shí)非常高效。
  • insert():對(duì)于較長(zhǎng)的列表來(lái)說(shuō),可能效率不高,因?yàn)榱斜碇械乃泻罄m(xù)元素可能需要移動(dòng)以為新元素騰出空間。
  • extend() 比在循環(huán)中使用 append() 添加多個(gè)元素更高效,因?yàn)樗钚』朔磸?fù)調(diào)整列表大小的開(kāi)銷。

移除元素

移除元素的方法有多種:

  • 使用 del 根據(jù)索引或切片刪除元素。
  • 使用 pop() 刪除指定位置的元素(如果沒(méi)有指定位置,則刪除最后一個(gè)元素)。
  • 使用 remove() 根據(jù)值刪除元素。
# Removes by value
fruits.remove('banana')
fruits

圖片圖片

popped_fruit = fruits.pop(2) 
print(popped_fruit)
fruits

圖片圖片

del fruits[0]
fruits

圖片圖片

  • remove(value):刪除給定值的第一個(gè)實(shí)例。當(dāng)你知道要?jiǎng)h除的值但不知道其位置時(shí),這個(gè)方法非常有用。
  • pop(index):刪除指定位置的對(duì)象并返回它。如果未提供索引,則刪除并返回最后一個(gè)元素。當(dāng)你確切知道要?jiǎng)h除的對(duì)象的位置或需要返回已刪除的對(duì)象時(shí),這個(gè)方法非常適合。
  • del list[index]:從給定的切片或索引中刪除項(xiàng)目。被刪除的對(duì)象不會(huì)被返回。當(dāng)你根據(jù)位置刪除切片或項(xiàng)目且不需要返回已刪除的對(duì)象時(shí),這個(gè)方法非常理想。

訪問(wèn)元素和切片

使用元素的索引是訪問(wèn)列表中元素的簡(jiǎn)單方法。對(duì)列表進(jìn)行切片可以獲取其中的一個(gè)子集。

first_fruit = fruits[0]
first_fruit

圖片圖片

# Gets a slice from index 1 to 2
fruit_slice = fruits[1:3]
fruit_slice

圖片圖片

  • 索引訪問(wèn):當(dāng)需要列表中的特定元素時(shí),這是理想的方法。就像從書架上選擇一本書,確切地知道它的位置。
  • 切片:適用于多種需求。就像在書架上選擇兩個(gè)位置之間的一系列書。

搜索和排序列表

搜索元素

in 關(guān)鍵字可以用來(lái)檢查列表中是否存在某個(gè)元素。使用 index() 方法可以進(jìn)行更深入的搜索,例如確定某個(gè)元素的索引。以下是相關(guān)代碼。

fruits = ['apple', 'banana', 'cherry']
# Returns True if 'banana' is in the list
is_banana_present = 'banana' in fruits
is_banana_present

圖片圖片

# Gets the index of 'banana'  
banana_index = fruits.index('banana')
banana_index

圖片

排序列表

sort() 方法用于就地排序,會(huì)直接修改原始列表,使排序變得簡(jiǎn)單。使用 sorted() 可以獲取排序后的列表副本,而不改變?cè)剂斜怼?/p>

numbers = [3, 1, 4, 1, 5, 9, 2]
# Sorts the list in-place
numbers.sort()  
print(numbers)


# Returns a new sorted list. The original remains unchanged
sorted_numbers = sorted(numbers)
sorted_numbers

圖片

反轉(zhuǎn)列表

使用 reverse() 方法可以就地反轉(zhuǎn)列表,或者使用步長(zhǎng)為 -1 的切片來(lái)創(chuàng)建一個(gè)反轉(zhuǎn)的列表副本。

numbers.reverse()
numbers

圖片圖片

reversed_numbers = numbers[::-1]
reversed_numbers

圖片圖片

  • 使用 reverse() 方法,當(dāng)你需要反轉(zhuǎn)列表元素且不再需要原始順序時(shí)。
  • 使用步長(zhǎng)為 -1 的切片,當(dāng)你需要一個(gè)反轉(zhuǎn)版本的列表,同時(shí)保留原始列表的順序以供進(jìn)一步使用時(shí)。

高級(jí)列表操作技巧

上面描述了基本的列表方法和技巧,讓我們來(lái)看看一些更高級(jí)的列表操作技巧。

列表推導(dǎo)式用于簡(jiǎn)潔高效的循環(huán)

列表推導(dǎo)式( list comprehensions)是一種基于現(xiàn)有列表創(chuàng)建新列表的簡(jiǎn)單方法。它類似于用一行代碼編寫一個(gè)循環(huán)。這在應(yīng)用于數(shù)據(jù)科學(xué)的轉(zhuǎn)換數(shù)據(jù)或過(guò)濾數(shù)據(jù)時(shí)非常有用。

# Creates a list of squares
squares = [x**2 for x in range(10)]
squares

圖片圖片

通過(guò)添加條件來(lái)實(shí)現(xiàn)偶數(shù)的平方列表:

even_squares = [x**2 for x in range(10) if x % 2 == 0]
even_squares

圖片圖片

嵌套列表和矩陣操作

列表中的列表稱為嵌套列表。在數(shù)據(jù)科學(xué)中,它們常用于表示矩陣或二維數(shù)據(jù)。

# A 3x3 matrix
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix)
first_row = matrix[0]
first_row

圖片圖片

使用 filter()、map() 和 reduce() 方法處理列表

這些方法為列表的函數(shù)式編程交互提供了工具:

  • filter() 根據(jù)條件選擇項(xiàng)目。
  • map() 對(duì)每個(gè)項(xiàng)目應(yīng)用一個(gè)函數(shù)。
  • reduce() 將所有項(xiàng)目聚合為一個(gè)輸出。

現(xiàn)在讓我們逐一應(yīng)用它們。首先創(chuàng)建一個(gè)列表并進(jìn)行過(guò)濾。以下是代碼示例:

from functools import reduce


# 創(chuàng)建一個(gè)列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


# 使用 filter() 選擇偶數(shù)
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  


# 使用 map() 將每個(gè)數(shù)字平方
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  


# 使用 reduce() 計(jì)算所有數(shù)字的和
sum_of_numbers = reduce(lambda x, y: x + y, numbers)
print(sum_of_numbers)

圖片圖片

處理列表副本

在處理 Python 列表副本時(shí),有兩種類型的副本:淺拷貝(Shallow copies)和深拷貝(Deep copies)。

盡管淺拷貝會(huì)創(chuàng)建一個(gè)新列表,但它不會(huì)復(fù)制其內(nèi)部的元素。這意味著,如果你有嵌套列表,原始列表和副本將共享這些嵌套列表。另一方面,深拷貝完全獨(dú)立于原始列表,因?yàn)樗鼤?huì)生成一個(gè)新列表,并復(fù)制其中的每個(gè)元素。

淺拷貝(Shallow copies

import copy
original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copied_list = copy.copy(original_list)
shallow_copied_list[0][0] = 'changed'
print(f"{original_list=}")
print(f"{shallow_copied_list=}")

圖片圖片

深拷貝(Deep copies)

import copy
original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copied_list = copy.deepcopy(original_list)
shallow_copied_list[0][0] = 'changed'
print(f"{original_list=}")
print(f"{shallow_copied_list=}")

在數(shù)據(jù)中處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)時(shí),了解淺拷貝和深拷貝之間的區(qū)別對(duì)于防止意外后果至關(guān)重要。

列表操作的提示

  • 構(gòu)建列表時(shí)使用列表推導(dǎo)式而不是循環(huán),它們通常更快且更易于理解。
  • 減少在循環(huán)中操作:在可能的情況下,使用列表推導(dǎo)式或 map() 生成列表比在循環(huán)中附加更有效。
  • 注意淺拷貝和深拷貝:了解其區(qū)別以防止意外修改。
  • 不要過(guò)度使用列表推導(dǎo)式:盡管功能強(qiáng)大,但如果過(guò)于復(fù)雜,可能會(huì)變得難以閱讀,保持簡(jiǎn)單和整潔。

上述探討了Python列表的多種方法與技巧,從基本操作如添加、刪除和訪問(wèn)元素,到高級(jí)技巧如列表推導(dǎo)式、嵌套列表和函數(shù)式編程方法。理解淺拷貝和深拷貝的區(qū)別、合理使用列表推導(dǎo)式等優(yōu)化技巧,有助于提高編程效率和簡(jiǎn)化數(shù)據(jù)處理。掌握這些方法對(duì)于數(shù)據(jù)科學(xué)、數(shù)據(jù)分析的編程至關(guān)重要。

責(zé)任編輯:武曉燕 來(lái)源: 新語(yǔ)數(shù)據(jù)故事匯
相關(guān)推薦

2024-12-06 07:00:00

Python列表索引

2024-07-11 12:14:20

Pythonmapfilter

2025-04-30 10:36:17

2022-03-21 17:30:04

JetpackGoogle開(kāi)發(fā)者

2024-03-12 17:54:55

容器類型Init

2024-10-17 16:45:46

Python內(nèi)置函數(shù)

2024-05-21 09:45:40

機(jī)器學(xué)習(xí)人工智能XAI

2024-07-31 15:11:57

SymPypython數(shù)學(xué)運(yùn)算

2024-10-06 14:01:47

Python裝飾器對(duì)象編程

2024-12-17 17:20:00

Python列表

2025-02-05 12:06:15

正態(tài)分?jǐn)?shù)變換NST

2010-02-01 09:40:08

Python操作

2024-08-19 00:01:00

2020-08-03 08:01:50

爬蟲技巧

2025-01-06 07:54:13

SPC控制圖工具

2023-07-07 08:00:00

KafkaSpringBoo

2024-07-16 10:43:45

偽對(duì)數(shù)可視化數(shù)據(jù)

2024-06-28 09:52:47

列表Python

2024-05-28 11:32:01

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)