当可能没有足够的值可以解压缩时,将列表值干净地分配给多个变量

时间:2019-06-20 18:50:31

标签: python list variable-assignment

例如,如果我想从a, b, c中分配l = [1,2,3,4,5],我可以做

a, b, c = l[:3]

但是如果l仅是[1,2](或[1][])怎么办?

是否可以自动将其余变量设置为None''0或其他一些默认值?

我曾想过在分配以匹配变量数量之前用默认值扩展列表,但是只是想知道是否有更好的方法。

1 个答案:

答案 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