国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-22 23:31:15
字體:
來源:轉載
供稿:網友

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

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

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

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

>>> from collections import namedtuple>>> Sub=namedtuple('Subscriber',['addr','joined'])>>> subscriber=Sub('lucy@example.com','2016-8-7')>>> subscriberSubscriber(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.pyfrom collections import namedtupleStock = 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 Datarecords = [  ('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)>>> sStock(name='ACMS', shares=100, price=123.45)>>> s.shares=75Traceback (most recent call last): File "<pyshell#2>", line 1, in <module>  s.shares=75AttributeError: can't set attribute>>>

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西峡县| 如东县| 永嘉县| 姜堰市| 定襄县| 克拉玛依市| 霍邱县| 子长县| 瑞丽市| 平谷区| 景德镇市| 宜丰县| 崇州市| 镇康县| 永胜县| 阜新| 贵州省| 江源县| 靖西县| 迁安市| 凤翔县| 永修县| 三河市| 工布江达县| 集贤县| 从江县| 湘乡市| 五莲县| 伊川县| 小金县| 桐梓县| 康定县| 阜宁县| 奉贤区| 延吉市| 大城县| 菏泽市| 马鞍山市| 突泉县| 高唐县| 昂仁县|