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

Python cookbook(數據結構與算法)將名稱映射到序列元素中的方法

 更新時間:2018年03月22日 11:58:31   作者:壟上行  
這篇文章主要介紹了Python cookbook(數據結構與算法)將名稱映射到序列元素中的方法,結合實例形式分析了Python使用collections.namedtuple()進行元組命名相關操作技巧,需要的朋友可以參考下

本文實例講述了Python將名稱映射到序列元素中的方法。分享給大家供大家參考,具體如下:

問題:希望通過名稱來訪問元素,減少結構中對位置的依賴性

解決方案:使用命名元組collections.namedtuple()。它是一個工廠方法,返回的是python中標準元組類型的子類,提供給它一個類型名稱以及相應的字段名稱,它就返回一個可實例化的類,為你以定義好的字段名稱傳入值等。

命名元組的主要作用在于將代碼同它所控制的元素位置間進行解耦

>>> from collections import namedtuple
>>> Sub=namedtuple('Subscriber',['addr','joined'])
>>> subscriber=Sub('lucy@example.com','2016-8-7')
>>> subscriber
Subscriber(addr='lucy@example.com', joined='2016-8-7')
>>> subscriber.addr
'lucy@example.com'
>>> subscriber.joined
'2016-8-7'

namedtuple的實例與普通的元組是可互換的,而且支持所有普通元組所支持的操作,例如索引和分解(unpacking).

>>> len(subscriber)
2
>>> addr,joined=subscriber
>>> addr
'lucy@example.com'
>>> joined
'2016-8-7'
>>>

使用普通元組的代碼:

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

通過位置來引用元素使得代碼的表達力不夠,而且也依賴于記錄的具體結構。

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

# example.py
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
# Some Data
records = [
  ('GOOG', 100, 490.1),
  ('ACME', 100, 123.45),
  ('IBM', 50, 91.15)
]
print(compute_cost(records))

運行結果:

65912.5

補充:

如果要構建涉及字典的大型數據結構,使用namedtuple會更加有效。但是注意,與字典不同的是,namedtuple是不可變的。例如:

>>> s=Stock('ACMS',100,123.45)
>>> s
Stock(name='ACMS', shares=100, price=123.45)
>>> s.shares=75
Traceback (most recent call last):
 File "<pyshell#2>", line 1, in <module>
  s.shares=75
AttributeError: can't set attribute
>>>

若要修改屬性,可使用namedtuple實例的_replace()方法來實現(xiàn)。該方法會創(chuàng)建一個全新的命名元組,并對相應的值做替換;

>>> s=s._replace(shares=75)
>>> s
Stock(name='ACMS', shares=75, price=123.45)
>>>

_replace()方法一個微妙的用途是它可以作為一種簡便的方法填充具有可選或缺失字段的命名元組。

步驟:

1、創(chuàng)建一個包含默認值的“原型”元組;

2、使用_replace()方法創(chuàng)建一個新實例,把相應的值替換掉;

from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price','date','time'])
#創(chuàng)建一個包含默認值的“原型”元組
stock_prototype=Stock('',0,0.0,None,None)
#創(chuàng)建一個函數實現(xiàn)將字典轉化為Stock類型
def dict_to_stock(s):
  return stock_prototype._replace(**s)
a={'name':'ACMS','shares':100,'price':123.45}
print(dict_to_stock(a))
b={'name':'ACMS','shares':100,'price':123.45,'date':'2016-08-08'}
print(dict_to_stock(b))
c={'name':'ACMS','price':123.45}
print(dict_to_stock(c))

運行結果:

Stock(name='ACMS', shares=100, price=123.45, date=None, time=None)
Stock(name='ACMS', shares=100, price=123.45, date='2016-08-08', time=None)
Stock(name='ACMS', shares=0, price=123.45, date=None, time=None)

注意:如果我們的目標是定義一個高效的數據結構,而且將來會修改各種實例屬性,那么不推薦namedtuple!

(代碼摘自《Python Cookbook》)

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • django中的auth模塊與admin后臺管理方法

    django中的auth模塊與admin后臺管理方法

    這篇文章主要介紹了django中的auth模塊與admin后臺管理方法,包括auth模塊的常用方法及如何擴展auth_user表,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • python 三種方法實現(xiàn)對Excel表格的讀寫

    python 三種方法實現(xiàn)對Excel表格的讀寫

    這篇文章主要介紹了python 三種方法實現(xiàn)對Excel表格的讀寫,幫助大家更好的利用python處理表格,感興趣的朋友可以了解下
    2020-11-11
  • Django contrib auth authenticate函數源碼解析

    Django contrib auth authenticate函數源碼解析

    這篇文章主要介紹了Django contrib auth authenticate函數源碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Python3中urllib庫添加請求頭的兩種方式

    Python3中urllib庫添加請求頭的兩種方式

    Python?3中的urllib模塊可以用來處理URL,包括下載和上傳文件、創(chuàng)建和讀取cookie、訪問Web?API等,本文給大家介紹Python3中urllib庫添加請求頭的兩種方式,感興趣的朋友一起看看吧
    2023-10-10
  • python調用win32接口進行截圖的示例

    python調用win32接口進行截圖的示例

    這篇文章主要介紹了python調用win32接口進行截圖的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Python如何在DataFrame增加數值

    Python如何在DataFrame增加數值

    這篇文章主要介紹了Python如何在DataFrame增加數值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Python實現(xiàn)購物車程序

    Python實現(xiàn)購物車程序

    這篇文章主要為大家詳細介紹了Python實現(xiàn)購物車程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python 進程 進程池 進程間通信實現(xiàn)解析

    python 進程 進程池 進程間通信實現(xiàn)解析

    這篇文章主要介紹了python 進程 進程池 進程間通信實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python自定義解析簡單xml格式文件的方法

    python自定義解析簡單xml格式文件的方法

    這篇文章主要介紹了python自定義解析簡單xml格式文件的方法,涉及Python解析XML文件的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • Python接口自動化判斷元素原理解析

    Python接口自動化判斷元素原理解析

    這篇文章主要介紹了Python接口自動化判斷元素原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論