假設我有一串由可變長度的逗號分隔的整數。分割字符串並將整數存儲到變量中的最佳方法是什麼?在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
有沒有更有效的方法呢?
假設我有一串由可變長度的逗號分隔的整數。分割字符串並將整數存儲到變量中的最佳方法是什麼?在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個元素:
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)
我從某個地方認識到這個把戲......; –
@larsmans:嘿,你並不是唯一一個擁有所有技巧的人。 :-P雖然我可能會承認已經被提醒... –
實際上,在這種情況下添加單個「無」可能會更好,因爲該列表必須至少包含兩個元素。但你已經有了我的+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]
拆分部分看起來不錯,爲什麼要把它放入單獨的變量呢?它只會是2或3? – Collin
如果你(取決於輸入)不創建它,你將如何訪問'c'? – eumiro