2012-07-03 32 views
1

假設我有一串由可變長度的逗號分隔的整數。分割字符串並將整數存儲到變量中的最佳方法是什麼?在Python中將可變長度字符串拆分爲變量的最佳方式是什麼?

目前,我有以下幾點。

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

拆分部分看起來不錯,爲什麼要把它放入單獨的變量呢?它只會是2或3? – Collin

+3

如果你(取決於輸入)不創建它,你將如何訪問'c'? – eumiro

回答

8

添加的哨兵,然後將列表限制爲3個元素:

a, b, c = (mylist + [None] * 3)[:3] 

現在a,b和c是至少是設置爲無,如果項目數超過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個元素,用更少的無值和捕捉ValueError異常:

try: 
    a, b, c = (mylist + [None])[:3] 
except ValueError: 
    print "You mast specify at least 2 values" 
    sys.exit(1) 
+0

我從某個地方認識到這個把戲......; –

+0

@larsmans:嘿,你並不是唯一一個擁有所有技巧的人。 :-P雖然我可能會承認已經被提醒... –

+0

實際上,在這種情況下添加單個「無」可能會更好,因爲該列表必須至少包含兩個元素。但你已經有了我的+1。 –

0

只是一個增編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] 
相關問題