2016-07-29 67 views
4

我有以下幾點:開箱時是否可以指定默認值?

>>> myString = "has spaces" 
>>> first, second = myString.split() 
>>> myString = "doesNotHaveSpaces" 
>>> first, second = myString.split() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 1 value to unpack 

我想有second默認爲None如果字符串沒有任何空白。目前,我有以下,但我想知道是否可以在一個行完成:中即partition代替split

splitted = myString.split(maxsplit=1) 
first = splitted[0] 
second = splitted[1:] or None 
+0

這是不可能的,因爲我知道,因爲分割功能寫到這樣的。但是你可以使用if語句,比如字符串中是否有空格或者空格。 – pilkington

+0

@wim - Python 3 – neverendingqs

回答

7

我建議你考慮使用不同的方法,:

>>> myString = "has spaces" 
>>> left, separator, right = myString.partition(' ') 
>>> left 
'has' 
>>> myString = "doesNotHaveSpaces" 
>>> left, separator, right = myString.partition(' ') 
>>> left 
'doesNotHaveSpaces' 

如果你是在python3,你有這樣的選項可供選擇:

>>> myString = "doesNotHaveSpaces" 
>>> first, *rest = myString.split() 
>>> first 
'doesNotHaveSpaces' 
>>> rest 
[] 
0

一般的解決辦法是chain你的迭代與01的個值,然後使用結果的islice

from itertools import chain, islice, repeat 

none_repat = repeat(None) 
example_iter = iter(range(1)) #or range(2) or range(0) 

first, second = islice(chain(example_iter, none_repeat), 2) 

這將填補缺失值與None,如果你需要這種功能有很多,你可以把它變成像這樣的功能:

def fill_iter(it, size, fill_value=None): 
    return islice(chain(it, repeat(fill_value)), size) 

雖然最常見的用途是迄今爲止的字符串,這就是爲什麼str.partition存在。

-1

你可以試試這個:

NUM2UNPACK=2 
parts = myString.split()  
first, second = parts+[None]*(NUM2UNPACK-(len(parts)))  
相關問題