2015-04-24 78 views
2

我創建了一個需要列表才能正常工作的方法。但是,您可以發送一個列表或一個簡單的字符串。我想將該字符串轉換爲一個列表,其中包含整個字符串作爲元素。舉例來說,如果我有:將字符串轉換爲長度爲1的列表

"I am a string" 

我想將其轉換成:

["I am a string"] 

我能做到這一點,像這樣:

"I am a string".split("[email protected]#$%^&*") 

因爲我永遠不會有它將總是將其轉換爲列表而不刪除任何字符。但是,這看起來並不是一種很好的方法。有另一種方法嗎?

+0

如果你想使用的'.split()',你可以設置一個清潔的版本' maxsplit'參數設置爲'0',這樣你就可以保證返回整個字符串:''我是一個字符串「。split('',0)' –

+1

我比我所做的要好得多,而且我很肯定這會在將來有用,所以謝謝! – user2869231

回答

8
>>> "abc" 
'abc' 
>>> ["abc"] 
['abc'] 
>>> abc = "abc" 
>>> abc 
'abc' 
>>> [abc] 
['abc'] 
>>> "I am a string".split("[email protected]#$%^&*") == ["I am a string"] 
True 

將值放在方括號中會使用一個項目列表,就像多個值使多個項目列表一樣。不遵循此模式的唯一容器是元組,因爲圓括號也用於分組。在這種情況下,只需添加一個逗號的單個項目後:

>>> abc 
'abc' 
>>> (abc) 
'abc' 
>>> (abc,) 
('abc',) 

如果你希望你的函數的掩護下,進行不同的處理列表和字符串,代碼的功能,如:

def f(maybe_list): 
    if not isinstance(maybe_list, list): 
     maybe_list = [maybe_list] 
    # carry on, you have a list. 
+1

我想OP是問如何接受一個字符串或一個字符串列表作爲參數 – ohruunuruus

+0

@ohruunuruus嗯,他的標題是「將一個字符串轉換爲一個長度列表」,這是我已經覆蓋的_exactly_。儘管我們可能會遇到一個XY問題。我補充說,JIC。 – matsjoyce

+0

對不起的標題標題感到抱歉;儘管matsjoyce做了正確的回答我的問題。我沒有意識到你可以在括號內放一個字符串......謝謝 – user2869231

2

如果」試圖接受一個字符串作爲函數輸入的字符串列表,但是接下來想要確保您始終在代碼的後續部分中使用列表,可以檢查參數的類型並在必要時進行轉換:

def listify(arg): 
    return input if isinstance(arg, list) else [input] 

listify("hello") 
['hello'] 

listify(["hi", "howdy"]) 
['hi', 'howdy'] 

這不必作爲一個單獨的函數發生,我只是把它放在函數中來快速說明。您也可以直接分配給變量而不是返回。

2

這裏有一個快速的方法:

#!python 
myString = 'some string' 
myList = list() 
myList.append(myString) 

...注意.append()將單個項目清單,同時.extend()增加項目列表的順序。

你遇到的問題是Python字符串也是一個字符序列(因此是一個「可迭代的」)。所以像這樣:list(myString)對待myString像它會對待任何其他迭代。 (從概念上講,這是通過實例化一個空列表,迭代初始化內容並將每個附加到新實例化的列表完成的)。

2
>>> s = "abc" 
>>> if isinstance(s, str): 
... s = [ s ] 
>>> s 
['abc'] 

正如前面提出的,你可以使這個檢查單獨的函數。

你也可以寫使用三元運算符一個班輪(因爲Python 2.5中引入):

s = s if isinstance(s, list) else [ s ]