例如,如果我想从a, b, c
中分配l = [1,2,3,4,5]
,我可以做
a, b, c = l[:3]
但是如果l
仅是[1,2]
(或[1]
或[]
)怎么办?
是否可以自动将其余变量设置为None
或''
或0
或其他一些默认值?
我曾想过在分配以匹配变量数量之前用默认值扩展列表,但是只是想知道是否有更好的方法。
答案 0 :(得分:5)
通常,要将N个元素从大小为M(其中M <= N)的列表中解压缩为N个单独的变量,则可以将列表切片填充到N并再次切片:
l = [1,]
a, b, c = (l[:3] + [None]*3)[:3]
a, b, c
# 1, None, None
如果您希望采用一种基于生成器的干净方法,这也将起作用:
from itertools import islice, cycle, chain
def pad(seq, filler=None):
yield from chain(seq, cycle([filler]))
a, b, c = islice(pad([1, ]), 3)
a, b, c
# 1, None, None