欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過代碼實例展示Python中列表生成式的用法

 更新時間:2015年03月31日 16:42:27   作者:tyler  
這篇文章主要介紹了通過代碼實例展示Python中列表生成式的用法,包括找出質(zhì)數(shù)、算平方數(shù)等基本用法,需要的朋友可以參考下

1 平方列表

如果你想創(chuàng)建一個包含1到10的平方的列表,你可以這樣做:

squares = []
for x in range(10):
 squares.append(x**2)

 

這是一個簡單的例子,但是使用列表生成式可以更簡潔地創(chuàng)建這個列表。

squares = [x**2 for x in range(10)]

這個最簡單的列表生成式由方括號開始,方括號內(nèi)部先是一個表達式,其后跟著一個for語句。列表生成式總是返回一個列表。

2 整除3的數(shù)字列表

通常,你可能這樣寫:

numbers = []
for x in range(100):
 if x % 3 == 0:
  numbers.append(x)

你可以在列表生成式里包含一個if語句,來有條件地為列表添加項。為了創(chuàng)建一個包含0到100間能被3整除的數(shù)字列表,可以使用列表推導(dǎo)式:

numbers = [x for x in range(100) if x % 3 == 0]

3 找出質(zhì)數(shù)

這通常要使用好幾行代碼來實現(xiàn)。

noprimes = []
for i in range(2, 8):
 for j in range(i*2, 50, i):
  noprimes.append(j)
primes = []
for x in range(2, 50):
 if x not in noprimes:
  primes.append(x)

不過,你可以使用兩個列表生成式來簡化代碼。

noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]
primes = [x for x in range(2, 50) if x not in noprimes]

第一行代碼在一個列表生成式里使用了多層for循環(huán)。第一個循環(huán)是外部循環(huán),第二個循環(huán)是是內(nèi)部循環(huán)。為了找到質(zhì)數(shù),我們首先找到一個非質(zhì)數(shù)的列表。通過找出2-7的倍數(shù)來產(chǎn)生這個非質(zhì)數(shù)列表。然后我們循環(huán)遍歷數(shù)字并查看每個數(shù)字是否在非質(zhì)數(shù)列表。

修正:正如reddit上的shoyer指出的,使用集合(set)來查找noprimes(代碼里的屬性參數(shù),譯者注)效率更高。由于noprimes應(yīng)該只包含唯一的值,并且我們頻繁地去檢查一個值是否存在,所以我們應(yīng)該使用集合。集合的使用語法和列表的使用語法類似,所以我們可以這樣使用:

noprimes = set(j for i in range(2, 8) for j in range(i*2, 50, i))
primes = [x for x in range(2, 50) if x not in noprimes]

4 嵌套列表降維

假設(shè)你有一個列表的列表(列表里包含列表)或者一個矩陣,

matrix = [[0,1,2,3], [4,5,6,7], [8,9,10,11]]

并且你想把它降維到一個一維列表。你可以這樣做:

flattened = []
for row in matrix:
 for i in row:
  flattened.append(i)

使用列表生成式:

flattened = [i for row in matrix for i in row]

這使用了兩個for循環(huán)去迭代整個矩陣。外層(第一個)循環(huán)按行迭代,內(nèi)部(第二個)循環(huán)對該行的每個項進行迭代。

5 模擬多個擲硬幣事件

假設(shè)需要模擬多次擲硬幣事件,其中0表示正面,1表示反面,你可以這樣編寫代碼:

from random import random
results = []
for x in range(10):
 results.append(int(round(random())))

或者使用列表生成式使代碼更簡潔:

from random import random
results = [int(round(random())) for x in range(10)]

這里使用了range函數(shù)循環(huán)了10次。每一次我們都把random()的輸出進行四舍五入。因為random()函數(shù)返回一個0到1的浮點數(shù),所以對輸出進行四舍五入就會返回0或者1。Round()函數(shù)返回一個浮點型數(shù)據(jù),使用int()將其轉(zhuǎn)為整型并添加到列表里。

6 移除句子中的元音字母

假設(shè)你有一個句子,

sentence = 'Your mother was a hamster'

并且你想移除所有的元音字母。我們可以使用幾行代碼輕易做到:

vowels = 'aeiou'
non_list = []
for l in sentence:
 if not l in vowels:
  non_list.append(l)
nonvowels = ''.join(non_list)

或者你可以使用列表生成式簡化它:

vowels = 'aeiou'
nonvowels = ''.join([l for l in sentence if not l in vowels])

這個例子使用列表生成式創(chuàng)建一個字母列表,字母列表的字母來自sentence句子的非元音字母。然后我們把生成的列表傳給join()函數(shù)去轉(zhuǎn)換為字符串。

修正:正如reddit上的iamadogwhatisthis提出的,這個例子不需要列表生成式。使用生成器(generator)更好:

vowels = 'aeiou'
nonvowels = ''.join(l for l in sentence if not l in vowels)

注意,這里去掉了方括號。這是因為join函數(shù)接收任意可迭代的數(shù)據(jù),包括列表或者生成器。這個沒有方括號的語法使用了生成器。這產(chǎn)生(與列表生成式)同樣的結(jié)果,相對于之前把所有條目包裝成一個列表,生成器在我們遍歷時才產(chǎn)生相應(yīng)的條目。這可以使我們不必保存整個列表到內(nèi)存,并且這對于處理大量數(shù)據(jù)更有效率。

 7 獲取目錄里的文件名列表

下面的代碼將會遍歷my_dir目錄下的文件,并在files里追加每個以txt為后綴的文件名。

import os
files = []
for f in os.listdir('./my_dir'):
 if f.endswith('.txt'):
  files.append(f)

這同樣可以使用列表生成式簡化代碼:

import os
files = [f for f in os.listdir('./my_dir') if f.endswith('.txt')]

或者你可以獲取一個相對路徑的列表:

import os
files = [os.path.join('./my_dir', f) for f in os.listdir('./my_dir') if f.endswith('.txt')]

感謝reddit上的rasbt提供。

8 將csv文件讀取為字典列表

我們常常需要讀取和處理csv文件的數(shù)據(jù)。處理csv數(shù)據(jù)的一個最有用的方法就是把它轉(zhuǎn)換為一個字典列表。

import csv
data = []
for x in csv.DictReader(open('file.csv', 'rU')):
 data.append(x)

你可以使用列表生成式快速實現(xiàn):

import csv
data = [ x for x in csv.DictReader(open('file.csv', 'rU'))]

DictReader類將會自動地使用csv文件的第一行作為字典的key屬性名。DictReader類返回一個將會遍歷csv文件所有行的對象。這個文件對象通過open()函數(shù)產(chǎn)生。我們提供了open()兩個參數(shù)–第一個是csv文件名,第二個是模式。在這例子,‘rU'有兩個意思。想往常一樣,‘r'表示以讀模式打開文件?!甎'表明我們將會接受通用換行符–‘n',‘r'和‘rn'。

感謝reddit上的blacwidonsfw提供。

相關(guān)文章

  • Python實現(xiàn)的對一個數(shù)進行因式分解操作示例

    Python實現(xiàn)的對一個數(shù)進行因式分解操作示例

    這篇文章主要介紹了Python實現(xiàn)的對一個數(shù)進行因式分解操作,結(jié)合實例形式分析了Python因式分解數(shù)值運算相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • 使用Python的Flask框架表單插件Flask-WTF實現(xiàn)Web登錄驗證

    使用Python的Flask框架表單插件Flask-WTF實現(xiàn)Web登錄驗證

    Flask處理表單除了本身的WTForms包,使用Flask-WTF擴展來增強表單功能也是很多開發(fā)者的選擇,這里我們就來講解如何使用Python的Flask框架表單插件Flask-WTF實現(xiàn)Web登錄驗證
    2016-07-07
  • Windows下實現(xiàn)pytorch環(huán)境搭建

    Windows下實現(xiàn)pytorch環(huán)境搭建

    這篇文章主要介紹了Windows下實現(xiàn)pytorch環(huán)境搭建,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python中的eval函數(shù)使用實例

    python中的eval函數(shù)使用實例

    eval() 函數(shù)用來執(zhí)行一個字符串表達式,并返回表達式的值,這篇文章主要介紹了python中的eval函數(shù),需要的朋友可以參考下
    2022-11-11
  • python使用tkinter實現(xiàn)屏幕中間倒計時

    python使用tkinter實現(xiàn)屏幕中間倒計時

    這篇文章主要為大家詳細介紹了python使用tkinter實現(xiàn)屏幕中間倒計時,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 基于tkinter中ttk控件的width-height設(shè)置方式

    基于tkinter中ttk控件的width-height設(shè)置方式

    這篇文章主要介紹了基于tkinter中ttk控件的width-height設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • pandas刪除重復(fù)數(shù)據(jù)簡單方法

    pandas刪除重復(fù)數(shù)據(jù)簡單方法

    這篇文章主要給大家介紹了關(guān)于pandas刪除重復(fù)數(shù)據(jù)的簡單方法,在數(shù)據(jù)處理過程中常常會遇到重復(fù)的問題,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • python的pytest框架之命令行參數(shù)詳解(下)

    python的pytest框架之命令行參數(shù)詳解(下)

    這篇文章主要介紹了python的pytest框架之命令行參數(shù)詳解,今天將繼續(xù)更新其他一些命令選項的使用,和pytest收集測試用例的規(guī)則,需要的朋友可以參考下
    2019-06-06
  • Python面向?qū)ο缶幊袒A(chǔ)實例分析

    Python面向?qū)ο缶幊袒A(chǔ)實例分析

    這篇文章主要介紹了Python面向?qū)ο缶幊袒A(chǔ),結(jié)合實例形式分析了Python面向?qū)ο缶幊填惖亩x、繼承、特殊方法及模塊相關(guān)原理與操作技巧,需要的朋友可以參考下
    2020-01-01
  • Python實現(xiàn)視頻分解成圖片+圖片合成視頻

    Python實現(xiàn)視頻分解成圖片+圖片合成視頻

    這篇文章主要介紹了如何利用Python實現(xiàn)視頻分解成圖片以及將圖片合成為視頻,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-04-04

最新評論