首頁 後端開發 Python教學 Python如何將名稱對應到序列的元素中(程式碼)

Python如何將名稱對應到序列的元素中(程式碼)

Oct 23, 2018 pm 04:14 PM
python

這篇文章帶給大家的內容是關於Python如何將名稱映射到序列的元素中(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

1、需求

我們的程式碼是透過位置(即索引或下標)來存取清單會元組的,但有時候這會讓程式碼變得有些難以閱讀。我們希望可以透過名稱來存取元素,以此減少結構中對位置的依賴性。

2、解決方案

比起普通的元組,collections.namedtuple()(命名元組)只增加了極少的開銷就提供了這些便利。實際上collections.namedtuple()是一個工廠方法,它回傳的是Python中標準元組類型的子類別。我們提供給它一個類型名稱以及對應的字段,它就傳回一個可實例化的類別、為你已經定義好的字段傳入值等。

from collections import namedtuple
Subscriber=namedtuple('Subsciber',['addr','joined'])
sub=Subscriber("1782980833@qq.com","2018-10-23")
print(sub)
print(sub.addr)
print(sub.joined)
print(len(sub))
addr,joined=sub
print(addr)
print(joined)
#下面错误,以为你namedtuple是不可变的
#sub.joined="2019"

結果:

Subsciber(addr='1782980833@qq.com', joined='2018-10-23')
1782980833@qq.com
2018-10-23
2
1782980833@qq.com
2018-10-23

儘管namedtuple的實例看起來就像一個普通的類別實例,但它的實例與普通的元組是可互換的,而且支援所有普通元組所支援的操作。

命名元組的主要作用在於將程式碼同它所控制的元素位置間解耦。所以,如果從資料庫呼叫中得到了一個大型的元組列表,而且透過元素的位置來存取元素,那麼假如在表單中新增了一列數據,那麼程式碼就會崩潰,但如果首先將返回的元組轉換為命名元組,就不會有問題。

為了說明這個問題,以下有一些使用普通元組的程式碼:

def compute_cost(records):
    total=0.0
    for rec in records:
        total+=rec[1]*rec[2]
    return total

透過位置來引用元素常常使得程式碼的表達力不夠強,而且也很依賴記錄的具體結構。

下面是使用命名元組的版本:

from collections import namedtuple
Stock=namedtuple('Stock',['name','shares','price'])
def compute_cost(records):
    total=0.0
    for rec in records:
        s=Stock(*rec)
        total+=s.shares*s.price
    return total

3、分析

namedtuple的一種可能用法是作為字典的替代,後者需要更多的空間來儲存。因此,如果要建立設計字典的大型數據,使用namedtuple會更加高效,但是請注意,與字典不同的是,namedtuple是不可變的。

如果需要修改任何屬性,可以透過使用namedtuple實例_replace()方法來實現。此方法會建立一個全新的命名元組,並對對應的值做替換。

from collections import namedtuple
Subscriber=namedtuple('Subsciber',['addr','joined'])
sub=Subscriber("1782980833@qq.com","2018-10-23")

print(sub)

sub=sub._replace(joined="2018-10-24")
print(sub)

結果:

Subsciber(addr='1782980833@qq.com', joined='2018-10-23')
Subsciber(addr='1782980833@qq.com', joined='2018-10-24')

_replace()方法有一個微妙的用途,那就是它可以作為一種簡單的方法填充具有可選或缺失字段的命名元組。要做到這一點,先建立一個包含預設值得原型數組,然後使用_replace()方法建立一個新的實例,把對應的值替換掉。

from collections import namedtuple
Subscriber=namedtuple('Subsciber',['addr','joined','age'])
sub=Subscriber("",None,0)

def dict_to_stock(s):
    return sub._replace(**s)

a={"addr":"111111@qq.com","joined":"1111-11-11","age":11}
a=dict_to_stock(a)
print(a)

b={"addr":"111111@qq.com","joined":"1111-11-11"}
b=dict_to_stock(b)
print(b)

結果:

Subsciber(addr='111111@qq.com', joined='1111-11-11', age=11)
Subsciber(addr='111111@qq.com', joined='1111-11-11', age=0)

最後,也是相當重要的是,應該要注意如果我們的目標是定義一個高效的資料結構,而且將來會修改各種實例屬性,那麼使用namedtuple並不是最佳選擇,相反,可以考慮頂一個使用了__slots__屬性的類別。

#

以上是Python如何將名稱對應到序列的元素中(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1602
29
PHP教程
1504
276
python django形式示例 python django形式示例 Jul 27, 2025 am 02:50 AM

首先定義一個包含姓名、郵箱和消息字段的ContactForm表單;2.在視圖中通過判斷POST請求處理表單提交,驗證通過後獲取cleaned_data並返迴響應,否則渲染空表單;3.在模板中使用{{form.as_p}}渲染字段並添加{%csrf_token%}防止CSRF攻擊;4.配置URL路由將/contact/指向contact_view視圖;使用ModelForm可直接關聯模型實現數據保存,DjangoForms實現了數據驗證、HTML渲染與錯誤提示的一體化處理,適合快速開發安全的表單功

優化用於內存操作的Python 優化用於內存操作的Python Jul 28, 2025 am 03:22 AM

pythoncanbeoptimizedFormized-formemory-boundoperationsbyreducingOverHeadThroughGenerator,有效dattratsures,andManagingObjectLifetimes.first,useGeneratorSInsteadoFlistSteadoflistSteadoFocessLargedAtasetSoneItematatime,desceedingingLoadeGingloadInterveringerverneDraineNterveingerverneDraineNterveInterveIntMory.second.second.second.second,Choos,Choos

Python連接到SQL Server PYODBC示例 Python連接到SQL Server PYODBC示例 Jul 30, 2025 am 02:53 AM

安裝pyodbc:使用pipinstallpyodbc命令安裝庫;2.連接SQLServer:通過pyodbc.connect()方法,使用包含DRIVER、SERVER、DATABASE、UID/PWD或Trusted_Connection的連接字符串,分別支持SQL身份驗證或Windows身份驗證;3.查看已安裝驅動:運行pyodbc.drivers()並篩選含'SQLServer'的驅動名,確保使用如'ODBCDriver17forSQLServer'等正確驅動名稱;4.連接字符串關鍵參數

python shutil rmtree示例 python shutil rmtree示例 Aug 01, 2025 am 05:47 AM

shutil.rmtree()是Python中用於遞歸刪除整個目錄樹的函數,能刪除指定文件夾及其所有內容。 1.基本用法:使用shutil.rmtree(path)刪除目錄,需處理FileNotFoundError、PermissionError等異常。 2.實際應用:可一鍵清除包含子目錄和文件的文件夾,如臨時數據或緩存目錄。 3.注意事項:刪除操作不可恢復;路徑不存在時拋出FileNotFoundError;可能因權限或文件佔用導致失敗。 4.可選參數:可通過ignore_errors=True忽略錯

什麼是加密貨幣中的統計套利?統計套利是如何運作的? 什麼是加密貨幣中的統計套利?統計套利是如何運作的? Jul 30, 2025 pm 09:12 PM

統計套利簡介統計套利是一種基於數學模型在金融市場中捕捉價格錯配的交易方式。其核心理念源於均值回歸,即資產價格在短期內可能偏離長期趨勢,但最終會回歸其歷史平均水平。交易者利用統計方法分析資產之間的關聯性,尋找那些通常同步變動的資產組合。當這些資產的價格關係出現異常偏離時,便產生套利機會。在加密貨幣市場,統計套利尤為盛行,主要得益於市場本身的低效率與劇烈波動。與傳統金融市場不同,加密貨幣全天候運行,價格極易受到突發新聞、社交媒體情緒及技術升級的影響。這種持續的價格波動頻繁製造出定價偏差,為套利者提供

Python Psycopg2連接池示例 Python Psycopg2連接池示例 Jul 28, 2025 am 03:01 AM

使用psycopg2.pool.SimpleConnectionPool可有效管理數據庫連接,避免頻繁創建和銷毀連接帶來的性能開銷。 1.創建連接池時指定最小和最大連接數及數據庫連接參數,確保連接池初始化成功;2.通過getconn()獲取連接,執行數據庫操作後使用putconn()將連接歸還池中,禁止直接調用conn.close();3.SimpleConnectionPool是線程安全的,適用於多線程環境;4.推薦結合contextmanager實現上下文管理器,確保連接在異常時也能正確歸還;

python iter和下一個示例 python iter和下一個示例 Jul 29, 2025 am 02:20 AM

iter()用於獲取迭代器對象,next()用於獲取下一個元素;1.使用iter()可將列表等可迭代對象轉換為迭代器;2.調用next()逐個獲取元素,當元素耗盡時觸發StopIteration異常;3.通過next(iterator,default)可提供默認值避免異常;4.自定義迭代器需實現__iter__()和__next__()方法,控制迭代邏輯;使用默認值是安全遍歷的常用方式,整個機制簡潔且實用。

如何在Python中執行SQL查詢? 如何在Python中執行SQL查詢? Aug 02, 2025 am 01:56 AM

安裝對應數據庫驅動;2.使用connect()連接數據庫;3.創建cursor對象;4.用execute()或executemany()執行SQL並用參數化查詢防注入;5.用fetchall()等獲取結果;6.修改後需commit();7.最後關閉連接或使用上下文管理器自動處理;完整流程確保安全且高效執行SQL操作。

See all articles