将字符串解压缩为一个/两个变量

时间:2019-02-25 17:23:42

标签: python python-3.x split

我正在寻找一种将字符串分成一个或两个变量的方法。

string1 = "one,two"
string2 = "one"
var1, var2 = string1.split(",")
var1, var2 = string2.split(",")

预期结果

var1="one" var2="two"
var1="one" var2=None

有点像.get("value", "default value")将默认值设置为None以避免ValueError: need more than 1 value to unpack

我知道我能做到

if "," in string: 
    split twice 
else: 
    split once

但是我正在尝试找到一种更好的方法来处理

使用pyhton3

4 个答案:

答案 0 :(得分:3)

您可以使var2成为剩余值的列表以便解压。如果split的值不够,则该列表将为空。

var1, *var2 = "one".split(",")
assert var1 == "one"
assert var2 == []

* ed变量必须是列表中的姓氏,但是对于在收集剩余值之前可以单独解包多少个前导值没有限制。

答案 1 :(得分:2)

要获得这样的结果,您可以这样做:

string2 = "one"
var1, var2 = (string2.split(",")+[None])[:2]
print(var1) #one
print(var2) #None

我只需在None产生的list的末尾添加.split,然后使用slice获取前2个元素,因此我总是得到2个值。

答案 2 :(得分:0)

定义一个函数,以所需的字符串作为函数的参数进行打印。

def req_print(string):
    if string != ',':
       print(var)
    else:
       var1, var2 = string.split(',')
       print(var1, var2)

答案 3 :(得分:0)

您可以使用三元运算符分配:

temp = 'one, two'.split(", ")

var1, var2 = temp if len(temp) == 2 else (temp[0], None)
print(var1, var2)
# one two

temp = 'one'.split(", ")

var1, var2 = temp if len(temp) == 2 else (temp[0], None)
print(var1, var2)
# one None