2016-07-29 14 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 

文字列に空白がない場合、私はNoneからsecondデフォルトを持っていると思います。すなわちpartition代わりsplitの、

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

。しかし、文字列に空白があるかどうかのようなif文を使うことができます。 – pilkington

+0

@wim - Python 3 – neverendingqs

答えて

7

私はあなたが別の方法を使用することを検討することをお勧めする可能性があります:私は現在、以下のものを持っているが、それは1行で行うことができるかどうか疑問に思って

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

場合

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

は、一般的な解決策はrepeat 01のを使用して反復可能なchainに次のようになります。あなたはのpython3に、使用可能なこのオプションを持っていますその後、の値とは、結果の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)))  
関連する問題