最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年03月22日 11:58:31   作者:壟上行  
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結構與算法)將名稱映射到序列元素中的方法,結合實例形式分析了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

補充:

如果要構建涉及字典的大型數(shù)據(jù)結構,使用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)建一個函數(shù)實現(xiàn)將字典轉(zhuǎ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)

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

(代碼摘自《Python Cookbook》)

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

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

相關文章

  • Python中使用ElementTree解析XML示例

    Python中使用ElementTree解析XML示例

    這篇文章主要介紹了Python中使用ElementTree解析XML示例,本文同時講解了XML基本概念介紹、XML幾種解析方法和ElementTree解析實例,需要的朋友可以參考下
    2015-06-06
  • python 中的list和array的不同之處及轉(zhuǎn)換問題

    python 中的list和array的不同之處及轉(zhuǎn)換問題

    python中的list是python的內(nèi)置數(shù)據(jù)類型,list中的數(shù)據(jù)類不必相同的,而array的中的類型必須全部相同。這篇文章給大家介紹了python 中的list和array的不同之處及轉(zhuǎn)換問題,需要的朋友參考下吧
    2018-03-03
  • openstack中的rpc遠程調(diào)用的方法

    openstack中的rpc遠程調(diào)用的方法

    今天通過本文給大家分享openstack中的rpc遠程調(diào)用的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-07-07
  • pytorch加載預訓練模型與自己模型不匹配的解決方案

    pytorch加載預訓練模型與自己模型不匹配的解決方案

    這篇文章主要介紹了pytorch加載預訓練模型與自己模型不匹配的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python爬蟲框架之Scrapy中Spider的用法

    Python爬蟲框架之Scrapy中Spider的用法

    今天給大家?guī)淼氖顷P于Python爬蟲的相關知識,文章圍繞著Scrapy中Spider的用法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python 如何展開嵌套的序列

    Python 如何展開嵌套的序列

    這篇文章主要介紹了Python 如何展開嵌套的序列,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • Python 實現(xiàn)RSA加解密文本文件

    Python 實現(xiàn)RSA加解密文本文件

    這篇文章主要介紹了Python 實現(xiàn)RSA加解密文本文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • M1芯片Mac上Anaconda的暫時替代(miniforge)

    M1芯片Mac上Anaconda的暫時替代(miniforge)

    這篇文章主要介紹了M1芯片Mac上Anaconda的暫時替代(miniforge),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Django框架cookie和session方法及參數(shù)設置

    Django框架cookie和session方法及參數(shù)設置

    這篇文章主要為大家介紹了Django框架cookie和session參數(shù)設置及介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • 聊聊python中令人迷惑的duplicated和drop_duplicates()用法

    聊聊python中令人迷惑的duplicated和drop_duplicates()用法

    這篇文章主要介紹了聊聊python中令人迷惑的duplicated和drop_duplicates()用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評論

会理县| 临桂县| 布拖县| 游戏| 依兰县| 赣州市| 汕尾市| 遂川县| 仙游县| 宁海县| 酒泉市| 兴义市| 庆安县| 定边县| 当阳市| 徐州市| 织金县| 许昌市| 台湾省| 武宣县| 泰宁县| 平昌县| 长治市| 平乐县| 库尔勒市| 乌鲁木齐市| 旺苍县| 临漳县| 诸城市| 资源县| 嘉黎县| 肃宁县| 沂源县| 沐川县| 岑巩县| 克什克腾旗| 泽库县| 新河县| 隆林| 木兰县| 江阴市|