我有这样的元组
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
如果别无选择,我可能会进行第二次尝试并将列表转换为元组。
答案 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]