在Python中及時使用列表理解可以使迭代列表操作變得容易。除了一行之外,它的可讀性更高,執行效率也更高。
然而,如果你不知道如何使用它,你可能會生氣。如果您不知道在代碼中的什麼地方應用它,那就更令人沮喪了。在這裡,我們將通過一些實際例子向您展示如何在Python中使用列表理解。
用Python創建項目列表很容易。但是,當您需要從數學或字符串操作生成值或項的列表時,該任務可能會變得有點乏味。這時使用列表理解就派上用場了。
使用列表理解的一個優點是,您可以在一個列表中執行多個操作。
相反,它創建新項並將它們附加到它自動聲明的空列表中。因此,Python的list comprehension不需要手動創建一個空列表並用for循環附加到它,而是讓您自動完成這項工作,而不用擔心新列表是如何產生的。
術語“列表理解”來自這樣一個事實:所有操作都在一個Python列表中,該列表被分配給一個命名變量。如前所述,它允許您在一行代碼中執行特定操作。然後將輸出附加到一個新列表。
最後,您還可以將列表理解的輸出用於其他目的。這是因為它將表達式堆疊在不同的變量中。所以你以後可以參考。
例如,你可能正在用BeautifulSoup刮一個網站。假設您打算從網站上獲取所有商品的名稱及其價格。
然後,您決定將刮取的數據放入CSV或Excel文件中。理想的做法是將所有商品的名稱及其價格颳去,並將它們放在單獨的列中。但是,在這種情況下,使用列表理解可以確保您在專用變量中獲得了刮取的數據。然後,您可以稍後將這些變量轉換為Python數據幀。
請看下面的示例:
Products = [i.text for i in bs.find_all('name tags')]Price = [i.text for i in bs.find_all('price tags')]一旦獲得循環變量,然後可以使用Python的熊貓將它們放在數據框架中的單獨列中。
for循環是列表理解中必不可少的迭代器。通常,Python中的列表理解採用以下格式:
ComprehensionVariable = [expression for items in list]Printing ComprehensionVariable將上述代碼的結果作為列表輸出。
但是,請注意不要將列表理解與開放for循環混淆。
例如,讓我們使用一個open For循環來獲取1到30之間的所有3的倍數的列表:
myList = []for i in range(1, 11):myList.append(i * 3)print(myList)Output: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]為了比較兩者,讓我們使用列表理解做同樣的事情:
multiplesOf3 = [i*3 for i in range(1, 11)]print(multiplesOf3)Output = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]您也可以使用條件語句的列表理解。下面的示例代碼打印1到10之間的所有奇數:
oddNumbers = [i for i in range(1, 11) if not i%2==2]print(oddNumbers)Output = [1, 3, 5, 7, 9]現在,讓我們用一個開for循環重寫上面的代碼:
myList = []for i in range(1, 11):if not i%2 == 0:myList.append(i)print(myList)Output: [1, 3, 5, 7, 9]相關:如何在Python中附加列表
列表理解還接受嵌套if語句:
oddNumbers = [i for i in range(1, 11) if not i%2==0 if i<4]print(oddNumbers)Output: [1, 3]它還接受嵌套for循環:
someNums = [[i*2 for i in range(1, 3)] for _ in range(4)]print(someNums)也可以在列表中有一個普通的嵌套for循環:
someNums = [i*2 for i in range(1, 3) for k in range(4)]您還可以使用Python列表理解操作字符串。讓我們看一看下面的單詞反理解:
word = ["This is a python list comprehension tutorial"]wordCounter = [i.count(' ') + 1 for i in word]print(wordCounter)Output: 7列表理解也可以接受執行特定操作的函數。讓我們**一個乘法器函數,在列表中獲得偶數,以瞭解其工作原理:
Numbers = [4, 7, 8, 15, 17, 10]def multiplier(n):multiple = n*2return multiplemultipleEven = [multiplier(i) for i in Numbers if i%2==0]print(multipleEven)Output: [8, 16, 20]您仍然可以在一個函數中編寫上面的代碼,而不需要使用理解。但是當您需要執行幾個迭代並將它們放入單獨的變量中時,列表理解非常有用。
例如,可以對n執行另一個操作,併為其指定一個專用變量。讓我們修改上面的理解,從奇數中生成偶數:
multipleEvenFromOdds = [multiplier(i) for i in Numbers if not i%2==0]print(multipleEvenFromOdds)Output: [14, 30, 34]除了列表理解之外,Python還提供了字典和集合理解功能。
請看下面的詞典理解示例,瞭解其工作原理:
corresponding = {i: i*2 for i in range(10) if not i%2==0}print(corr)Output: {1: 2, 3: 6, 5: 10, 7: 14, 9: 18}上面的代碼遍歷1到9之間的數字列表,並使它們成為鍵。然後它告訴Python將每個鍵乘以2。最後,它將該操作的結果顯示為結果數組中每個鍵的對應值。
相關:數組和列表在Python中的工作方式
集合理解有點類似於列表理解。下面是一個集合理解的例子:
numbers = {i**(2) for i in range(10) if i%4==0}print(numbers)Output: {0, 16, 64}但是,與列表理解不同,set congress刪除重複項:
nums = {i for i in range(20) if i%2==1 for k in range(10) if k%2==1}print(nums)Output: {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}您可以使用列表理解來嘗試上面的代碼,看看它們有什麼不同。
我們已經看了列表理解的不同例子,以及在哪裡可以使用它們。然而,與任何其他Python方法一樣,列表理解的用例取決於您希望解決的特定問題。因此,你應該只使用它,如果它是理想的具體問題,你希望解決。
列表理解的目的之一是簡化代碼並使其更具可讀性。所以,在處理它的時候一定要避免複雜性。例如,對Python的理解可能會變得複雜。這違背了它的目的。
關鍵區別–python中的append與extend Python是一種流行的通用程式語言。它是一種高階語言,所以語法很容易被程式設計師理解和閱讀。Python中最基本的資料結構是序列。它是一組元素。起始元素的索引為0,下一個元素的索引為1...
關鍵區別–perl與python 計算機程式為計算機執行任務提供指令。一組指令被稱為計算機程式。計算機程式是用程式語言開發的。高階語言程式設計師可以理解,但計算機卻不能理解。因此,這些程式被轉換成機器可理解的格式...
關鍵區別——ruby與python Ruby和Python是高階程式語言,因為它們遵循與英語語言相似的語法。因此,程式設計師很容易理解這些語言。Ruby和Python都是解釋語言。兩種語言都有大量的社群支援。Ruby和Python的一個主要優點是這些語...
列表(list)和元組(tuple)的區別 Python是一種通用的高階程式語言。它很容易閱讀和學習。因此,它是初學者開始計算機程式設計的通用語言。Python程式易於測試和除錯。它是一種用來構建各種應用程式的語言。其中一些是機器學...
...lenium WebDriver。在本文中,我們將簡要介紹Selenium,並提供如何在系統上安裝Selenium WebDriver的詳細指南。 ...
... 下面是如何表示物件陣列。在這種表示法中,陣列的每一項都是一個物件。以下是棒球運動員的工資樣本。 ...
...資料型別告訴編譯器(或者在Python的情況下告訴直譯器)如何使用資料。資料結構指定可以執行的操作,並且通常實現特定的規則和規定。 ...
有沒有想過如何在兩種程式語言之間傳送資料?是否嘗試傳送一個物件或多個數據段? ...