Python中的部分列表解包
在Python中,赋值运算符可以把一个列表或元组的内容拆分到多个变量中,像这样:
l = (1, 2)
a, b = l # Here goes auto unpack
不过,我需要在左边的变量名和右边列表中的项目数量完全一致。有时候我并不知道右边列表的大小,比如当我使用split()的时候。
举个例子:
a, b = "length=25".split("=") # This will result in a="length" and b=25
但是下面这段代码会导致错误:
a, b = "DEFAULT_LENGTH".split("=") # Error, list has only one item
有没有办法像上面的例子那样拆分列表,让a等于"DEFAULT_LENGTH",而b等于None
或者不设置呢?一种直接的方法看起来有点长:
a = b = None
if "=" in string :
a, b = string.split("=")
else :
a = string
11 个回答
7
这个方法比你的方案稍微好一点,但还是不太优雅;我不会感到惊讶,如果有更好的做法的话。
a, b = (string.split("=") + [None])[:2]
70
这段内容可能对你没什么用,除非你在用Python 3。不过为了完整性,值得提一下在Python 3中引入的扩展元组解包功能,它让你可以做一些这样的事情:
>>> a, *b = "length=25".split("=")
>>> a,b
("length", ['25'])
>>> a, *b = "DEFAULT_LENGTH".split("=")
>>> a,b
("DEFAULT_LENGTH", [])
也就是说,元组解包现在的工作方式和参数解包很相似,你可以用*
来表示“剩下的项目”,并把它们作为一个(可能是空的)列表获取。
不过,对于你正在做的事情,使用分区(Partition)可能是最好的解决方案。
48
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们可以去一些技术论坛,比如StackOverflow,去寻找解决方案或者向其他人请教。
在这些论坛上,很多人会分享他们的经验和解决办法。你可以看到各种各样的问题和答案,有些人会详细解释他们是怎么解决问题的,有些人则会直接给出代码示例。
如果你在学习编程,遇到困难,不妨去这些地方看看,可能会找到你需要的帮助。记得多看看别人的提问和回答,这样可以帮助你更好地理解编程的知识。
# this will result in a="length" and b="25"
a, b = "length=25".partition("=")[::2]
# this will result in a="DEFAULT_LENGTH" and b=""
a, b = "DEFAULT_LENGTH".partition("=")[::2]