Python从任意长度可迭代对象中分解元素的技巧
本文介绍Python中从任意长度可迭代对象分解元素的方法。当元素数量超过目标变量时,使用*表达式可避免“分解值过多”异常。通过*修饰变量置于首、尾或中间位置,可灵活提取头部、尾部或中间数据,并支持丢弃不需要的值。
本文通过具体示例,解析如何在Python中从任意长度的可迭代对象里分解出所需元素。该技巧对于处理动态数据很有帮助,供读者参考学习。
若尝试从长度超过预期N的可迭代对象中分解出N个元素,Python会抛出“分解值过多”的异常。
借助*表达式可以解决上述问题,具体用法如下:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> *headdata,current=[10,3,2,6,8,5] #*修饰的变量位于列表第一个位置,轻松分别头部和尾部
>>> headdata
[10, 3, 2, 6, 8]
>>> current
5
>>> record=('dave','dave@example.com','773-555-1212','847-555-1212')
>>> name,email,*phone_numbers=record#*修饰的变量位于列表最后一个位置
>>> name
'dave'
>>> email
'dave@example.com'
>>> phone_numbers
['773-555-1212', '847-555-1212']
>>> line='nobody:*:-2:-3:Unpriviledged User:/var/empty:/usr/bin/false'
>>> uname,*fields,homedir,sh=line.split(':') #*修饰的变量位于中间位置,且与字符串处理操作相结合
>>> uname
'nobody'
>>> homedir
'/var/empty'
>>> sh
'/usr/bin/false'
>>> fields
['*', '-2', '-3', 'Unpriviledged User']
>>> record=['lucy',50,123.4,(12,13,2016)]
>>> name,*_,(*_,year)=record #将某些分解出的值丢弃
>>> name
'lucy'
>>> year
2016
>>>
当迭代变长元组序列时,*表达式的优势尤为明显:

(代码摘自《Python Cookbook》)
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









