资讯专栏INFORMATION COLUMN

Python特性之元组

CoderBear / 1519人阅读

摘要:通过字段名或者位置来获取一个字段的信息属性是一个包含这个类所有字段名称的元组用通过接受一个可迭代对象来生成这个类的一个实例作用跟一样把具名元组以形式返回


元组不仅仅是不可变列表
元组其实是对数据的记录:元组中的每个元素都存放了记录中一个字段的数据,外加这个字段的位置。
正是这个位置信息给数据赋予了意义
lax_coordinates = (33.9425, -118.408056)
city, year, pop, chg, area = ("Tokyo", 2003, 32450, 0.66, 8014)
traveler_ids = [("USA", "31195855"), ("BRA", "CE342567"), ("ESP", "XDA205856")]
for passport in sorted(traveler_ids):
    print("%s/%s" % passport)

for country, _ in traveler_ids:  # 元组拆包
    print(country)
元组拆包可以应用到任何可迭代对象
唯一硬性要求:被迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致
最好辨认的元组拆包形式就是平行赋值

1 平行赋值

latitude, longitude = lax_coordinates

2 不使用中间变量

latitude, longitude = longitude, latitude

3 用*运算符把一个可迭代对象拆开作为函数的参数

t = (20, 8)
quotient, remainder = divmod(*t)

4 让一个函数可以以元组的形式返回多个值

import os
_, filename = os.path.split("/home/app/.ssh/idrsa.pub")
print(filename)

用*来处理剩下的元素

a, b, *rest = range(5)
print(*rest)

*前缀只能用在一个变量名前面,但是位置可以随意

a, *body, c, d = range(5)
print(*body)
嵌套元组拆包
metro_areas = [
    ("Tokyo", "JP", 36.933, (35.689722, 139.691667)),
    ("Delhi NCR", "IN", 21.935, (28.613889, 77.208889)),
    ("Mexico, City", "MX", 20.142, (19.43333, -99.133333)),
    ("New York-Newark", "US", 20.142, (40.808611, -74.020386)),
    ("Sao Paulo", "BR", 19.649, (-23.547778, -46.635833)),
]

print("{:15} |{:^9} |{:^9}".format("", "lat.", "long."))
fmt = "{:15} | {:9.4f}|{:9.4f}"
for name, cc, pop, (latitude, longitude) in metro_areas:
    if longitude <= 0:
        print(fmt.format(name, latitude, longitude))
具名元组

collections.namedtuple 是一个工厂函数,可以用来构建一个带字段名字的元组和一个有名字的类(利于调试)

创建一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字。

存放在对应字段的数据要以一串参数的形式传入到构造函数中。

通过字段名或者位置来获取一个字段的信息

from collections import namedtuple
City = namedtuple("City", "name country population coordinates")
tokyo = City("Tokyo", "JP", 36.933, (35.689722, 139.691667))
print(tokyo)

_fields属性是一个包含这个类所有字段名称的元组

用_make()通过接受一个可迭代对象来生成这个类的一个实例,作用跟City(*delhi_data)一样

_asdict把具名元组以collections.OrderedDict形式返回

print(City._fields)
LatLong = namedtuple("LatLong", "lat long")
delhi_data = ("Delhi NCR", "IN", 21.935, LatLong(28.613889, 77.208889))
delhi = City._make(delhi_data)
print(delhi._asdict())
for key, value in delhi._asdict().items():
    print(key + ":", value)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42297.html

相关文章

  • python基础知识元组

    摘要:元组运算符可与使用加号来连接两个元组输出为也可以使用乘号输出为当然也可以用成员运算符通用地可以使用删除元组元组相关内置函数计算元组元素个数。返回元组中元素最大值返回元组中元素最小值。可迭代对象将可迭代对象转换为元组。 元组是什么? 你可以把它看作是只读的列表,因为元组不可改变,但是要注意,如果元组中含有列表元素,则该列表元素是可变的,通俗地讲就是儿子不可变,但是孙子可变 由于元组不可...

    ACb0y 评论0 收藏0
  • Python全栈之路系列元组数据类型

    摘要:元组和列表的为唯一区别就是列表可以更改,元组不可以更改,其他功能与列表一样创建元组的两种方法第一种第二种如果元祖内只有一个元素,那么需要加上一个逗号,否则就变成字符串了。 元组(tuple)和列表的为唯一区别就是列表可以更改,元组不可以更改,其他功能与列表一样 创建元组的两种方法 第一种 ages = (11, 22, 33, 44, 55) 第二种 ages = tuple((11,...

    李涛 评论0 收藏0
  • python-数据类型元组

    摘要:元组是不可以改变的序列,如果元组的元素包含列表字典是支持修改操作的。这就意味着它们通过算法得到的值总是一个值。这是作为字典键值的一个必备条件。 元组是不可以改变的序列,如果元组的元素包含列表、字典是支持修改操作的。因为不可变所以元素的修改会报错: >>> tt=(3,4,5) >>> type(tt) >>> tt[2]=4 Traceback (most recent call l...

    xiaowugui666 评论0 收藏0
  • 7、TypeScript 元组 - Tuple

    摘要:与声明数组类型类似只不过在数组基础上更加细分化每个元素示例顺序不可以颠倒长度不可以违规是固定的如果你的数组没有满足元组要求报错意思就是你的属性个在类型中缺失,但在元组中设定是必须的如果你的元素没有满足数组的长度会怎么样呢报错意思是你的数组不 与 声明数组类型 类似 只不过在 数组 基础上更加细分化每个元素 示例: let myTuple: [number, string, boo...

    rickchen 评论0 收藏0
  • Python中的类元编程

    摘要:类元编程是指在运行时创建或定制类的技艺。注意在中做元编程时最好不要用和函数。三元类基础知识元类是类元编程最高级的工具使用元类可以创建具有某种特质的全新变种,例如抽象基类。建议除非开发框架,否则不要在生产代码中定义元类或抽象基类。 导语:本文章记录了本人在学习Python基础之元编程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、了解运行时创建...

    alexnevsky 评论0 收藏0

发表评论

0条评论

CoderBear

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<