将元组的部分打包成元组

时间:2017-06-21 09:30:03

标签: python python-3.x tuples

我有这样的元组

t = (1, '0076', 'AU', '9927016803A', '9927013903B', '0010', 'VO')

我希望将前6个值提取为元组(按顺序),将最后一个值提取为字符串。

以下代码已经有效,但我想知道是否有“一线”来实现我正在寻找的东西。

# works, but it's not nice to unpack each value individually
cid,sc,ma,comp,mat,step,alt = t 
t_new = (cid,sc,ma,comp,mat,step,)
print(t_new, alt) # (1, '0076', 'AU', '9927016803A', '9927013903B', '0010') VO

这与我正在寻找的非常接近,但它将第一个值作为列表而不是元组返回:

# works, but returns list
*t_new,alt = t 
print(t_new, alt) # [1, '0076', 'AU', '9927016803A', '9927013903B', '0010'] VO

我已经尝试了以下方法,但没有成功:

tuple(*t_new),alt = t # SyntaxError
(*t_new),alt = t # still a list
(*t_new,),alt = t # ValueError

如果别无选择,我可能会进行第二次尝试并将列表转换为元组。

3 个答案:

答案 0 :(得分:4)

为什么不呢:

t = (1, '0076', 'AU', '9927016803A', '9927013903B', '0010', 'VO')

t_new, alt = t[:-1], t[-1]
print(t_new, alt)   # (1, '0076', 'AU', '9927016803A', '9927013903B', '0010') VO

答案 1 :(得分:2)

要么像你说的那样再把它转换成一个元组:

*t_new, alt = t
t_new = tuple(t_new)

或者只是使用切片:

t_new = t[:-1]  # Will be a tuple
alt = t[-1]

如果你想谈论效率,与切片相比,元组打包/解包相对较慢,所以底部应该是最快的。

答案 2 :(得分:1)

如果你总是希望在新元组中有前6个值:

t = (1, '0076', 'AU', '9927016803A', '9927013903B', '0010', 'VO')
newT = t[0:6]