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

Rak*_*sha 1 python list variable-assignment

例如,如果我要指派a, b, cl = [1,2,3,4,5],我可以做

a, b, c = l[:3]
Run Code Online (Sandbox Code Playgroud)

但是,如果l只有[1,2][1][])怎么办?

有没有一种方法可以自动将其余变量设置为None''0或其他某个默认值?

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

cs9*_*s95 5

通常,要将N个元素从大小为M的列表(其中M <= N)中解压缩为N个单独的变量,则可以将列表切片填充到N并再次切片:

l = [1,]
a, b, c =  (l[:3] + [None]*3)[:3]

a, b, c
# 1, None, None
Run Code Online (Sandbox Code Playgroud)

如果您喜欢基于生成器的干净方法,那么这也将起作用:

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
Run Code Online (Sandbox Code Playgroud)