可変長のコンマで区切られた整数の文字列があるとします。文字列を分割して整数を変数に格納する最良の方法は何ですか?
現在、私は以下を持っています。
input = sys.argv[1]
mylist = [int(x) for x in input.split(',')]
if len(mylist) == 2: a, b = mylist
else: a, b, c = mylist
これを行うより効率的な方法はありますか?
可変長のコンマで区切られた整数の文字列があるとします。文字列を分割して整数を変数に格納する最良の方法は何ですか?
現在、私は以下を持っています。
input = sys.argv[1]
mylist = [int(x) for x in input.split(',')]
if len(mylist) == 2: a, b = mylist
else: a, b, c = mylist
これを行うより効率的な方法はありますか?
センチネルを追加してから、リストを 3 つの要素に制限します。
a, b, c = (mylist + [None] * 3)[:3]
現在、a、b、c は少なくとも None に設定されており、アイテムの数が 3 つを超える場合は、最初の 3 つの値のみが使用されます。
デモ:
>>> mylist = [1, 2]
>>> a, b, c = (mylist + [None] * 3)[:3]
>>> print a, b, c
1 2 None
>>> mylist = [1, 2, 3, 4]
>>> a, b, c = (mylist + [None] * 3)[:3]
>>> print a, b, c
1 2 3
少なくとも 2 つの要素が必要な場合は、より少ない None 値を使用して、ValueError をキャッチします。
try:
a, b, c = (mylist + [None])[:3]
except ValueError:
print "You mast specify at least 2 values"
sys.exit(1)
Martjin の補足です。なぜそれを使用するのかを示す関数に変えました。を使用して動的センチネルを実行できます
def store(mylist,expsiz = 10, dflt = None):
return mylist + [dflt]*(expsiz-len(mylist))
>>> mylist = [1,2,5]
>>> fixedlen = store(mylist)
>>> print fixedlen
[1,2,5,None,None,None,None,None,None,None]