千家信息网

Python中序列拆分的过程是怎么样的

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天就跟大家聊聊有关Python中序列拆分的过程是怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。元组拆分元组拆分是最为常见的一种拆分,
千家信息网最后更新 2026年11月03日Python中序列拆分的过程是怎么样的

今天就跟大家聊聊有关Python中序列拆分的过程是怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

元组拆分

元组拆分是最为常见的一种拆分,示例如下:

p = (4, 5)x, y = p print(x, y) # 4 5

如果写成

x, y, z = p

那么就会抛出ValueError异常:"not enough values to unpack (expected 3, got 2)"
如果写成

p = (4, 5, 6)x, y = p

那么就会抛出ValueError异常:"too many values to unpack (expected 2)"

字符串拆分

字符串的拆分示意如下:

s = 'Hello'a, b, c, d, e = sprint(a) # H

拆分时丢弃值

如果在拆分时想丢弃某些特定的值,可以用一个用不到的变量名来作为丢弃值的名称(常选'_'做为变量名),如下所示:

s = 'Hello'a, b, _, d, _ = sprint(a) # H

嵌套序列拆分

Python也提供简洁的对嵌套序列进行拆分的语法。如下所示我们对一个比较复杂的异质列表进行拆分:

data = ['zhy', 50, 123.0, (2000, 12, 21)]name, shares, price, (year, month, day) = dataprint(year) # 2000

如果你想完整地得到(2000, 12, 21)这个表示时间戳的元组,那么你就得这样写:

data = ['zhy', 50, 123.0, (2000, 12, 21)]name, shares, price, date = dataprint(date) # (2000, 12, 21)

从任意长度的可迭代对象中拆分

之前我们说过,如果我们想从可迭代对象中分解出\(N\)个元素,但如果这个可迭代对象长度超过\(N\),则会抛出异常"too many values to unpack"。针对这个问题的解决方案是采用"*"表达式。

比如我们给定学生的分数,想去掉一个最高分和一个最低分,然后对剩下的学生求平均分,我们可以这样写:

def avg(data: list):    return sum(data)/len(data)# 去掉最高分,最低分然后做均分统计def drop_first_last(grades):    first, *middle, last = grades    return avg(middle)print(drop_first_last([1,2,3,4])) # 2.5

还有一种情况是有一些用户记录,记录由姓名+电子邮件+任意数量的电话号码组成,则我们可以这样分解用户记录:

record = ['zhy', 'zhy1056692290@qq.com', '773-556234', '774-223333']name, email, *phone_numbers = recordprint(phone_numbers) # ['773-556234', '774-223333']

事实上,如果电话号码为空也是合法的,此时phone_numbers为空列表。

record = ['zhy', 'zhy1056692290@qq.com']name, email, *phone_numbers = recordprint(phone_numbers) # []

还有一种使用情况则更为巧妙。如果我们需要遍历变长元组组成的列表,这些元组长度不一。那么此时*表达式可大大简化我们的代码。

records = [('foo', 1, 2), ('bar', 'hello'), ('foo', 3, 4)]for tag, *args in records:    if tag == 'bar':        print(args)# ['hello']

在对一些复杂的字符串进行拆分时,*表达式也显得特别有用。

line = "nobody:*:-2:-2:-2:Unprivileged User:/var/empty:/usr/bin/false"uname, *fields, home_dir, sh = line.split(':')print(home_dir) # /var/empty

*表达式也可以和我们前面说的嵌套拆分和变量丢弃一起结合使用。

record = ['ACME', 50, 123.45, (128, 18, 2012)]name, *_, (*_, year) = recordprint(year) # 2012

最后再介绍*表达式用于递归函数的一种黑魔法,比如与递归求和结合可以这样写:

items = [1, 10, 7, 4, 5, 9]def sum(items):    head, *tail = items    return head + sum(tail) if tail else headprint(sum(items)) # 36

不过,Python由于自身递归栈的限制,并不擅长递归。我们最后一个递归的例子可以做为一种学术上的尝试,但不建议在实践中使用它。

Martelli A, Ravenscroft A, Ascher D. Python cookbook[M]. " O'Reilly Media, Inc.", 2005. 数学是符号的艺术,音乐是上界的语言。

看完上述内容,你们对Python中序列拆分的过程是怎么样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

表达式 递归 序列 内容 变量 字符 字符串 对象 长度 迭代 过程 复杂 最低 最高 号码 学生 情况 最高分 用户 电话 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 互联网科技公司的优势 奇酷互联网科技公司 亿账通互联网科技 广州凡科互联网科技 现代科技和互联网有关系吗 宁波青枫互联网科技有限公司 互联网科技创新服务 互联网和黑科技的看法 福建科技产业互联网发展 新兴科技互联网创新大赛颁奖典礼 呼和浩特新华互联网科技学院 济南有互联网科技公司吗 保险科技服务互联网营销体系 江苏苏星互联网科技有限公司 江苏互联网科技小贷 珠海东科互联网科技有限公司 云南互联网科技学费 互联网领先科技活动 兰石爱特工业互联网科技分公司 南京欣网互联网络科技有限公司 成都互联网科技公司 互联网科技宣传片 丰台科技园 互联网公司 新华互联网科技2019 互联网科技创新服务 洛阳昕诺飞互联网科技有限公司 银行科技岗属于互联网吗 现代互联网科技公司 利用互联网等科技手段
0