拆分序列后赋值给多个变量
问题
现有一个包含N个元素的元组或序列,如何将其值拆分后同时赋值给N个变量?
解法
任何序列 (或可迭代对象) 可通过一个简单赋值语句拆分并赋值给多个变量。唯一前提是变量数量必须与序列元素长度一致。
>>> p = (4, 5)>>> x, y = p>>> x4>>> y5
>>> data = [ 'ACME', 50, 91.1, (, 12, 21) ]>>> name, shares, price, date = data>>> name'ACME'>>> date(, 12, 21)
>>> name, shares, price, (year, mon, day) = data>>> name'ACME'>>> year>>> mon12>>> day21
若变量个数和序列长度不匹配,则抛异常。
>>> p = (4, 5)>>> x, y, z = pTraceback (most recent call last):File "<stdin>", line 1, in <module>ValueError: need more than 2 values to unpack
讨论
其实,该拆分赋值法可用于任一可迭代对象上,而不仅仅是列表或元组,还包括字符串,文件对象,迭代器和生成器。
>>> s = 'Hello'>>> a, b, c, d, e = s>>> a'H'>>> b'e'>>> e'o'
有时,你只想取其中一部分,丢弃其他。对此,Python没有提供特殊语法。但你可使用任意变量名去占位,到时弃之即可。
>>> data = [ 'ACME', 50, 91.1, (, 12, 21) ]>>> _, shares, price, _ = data>>> shares50>>> price91.1
你必须保证你选用的那些占位变量名在其他地方没被使用到。