2016-07-06 78 views
-8

我需要這個字符串分隔:如何字符串和整數分離到一個列表

s = "I have 10 cars" 

到像這樣的列表:

['I','h','a','v','e',10,'c','a','r','s'] 

中的數字不應該分開。也應該輸入數字作爲整數(沒有這些'')

+4

太棒了!祝你好運!詢問一個描述性問題,如果你被卡住了,那麼到目前爲止你已經嘗試和研究過什麼 – Sayse

回答

-4

嘗試將其作爲字符串返回。

list(str("I have 10 cars")) 
+0

爲什麼我被拒絕投票? – sawreals

+0

這不起作用。嘗試自己運行它 – Brian

+5

你的回答是錯誤的。它產生'['I','h','a','v','e','1','0','c','a','r','s']',即它也分裂了數字。另外,不需要使用'str'。 – MisterMiyagi

3
res = [] 
for item in s.split(' '): 
...  try: 
...   int(item) 
...   res.append(item) 
...  except: 
...   res += list(item) 
+0

'append'和'+ ='對於'list'來說真的很貴,因爲你需要每次調整它的大小 – Brian

+0

@Brian append將創建列表 – galaxyan

+0

'append'和'extend'(或'+ ='as如果有機會,應該避免使用)。這兩種操作都會導致Python不得不在內存中調整數組的大小,因此它效率不高。你的方法可行,但對於更長的字符串,這將是一個昂貴的操作 – Brian

2

其他的答案這裏有更大的字符串非常低效的。

你應該使用不必要append,因爲它可能是非常昂貴的具有更大的字符串。按照我的方式,每當您找到需要的新元素時,都不會調整list的大小。在效率的興趣,你可以做到這一點,像這樣:

s = "I have 10 cars" 

def seperateWithInts(l): 
    for s in l.split(): 
     if s.isdigit(): 
      yield s 
     else: 
      for c in s: 
       yield c 

s2 = [i for i in seperateWithInts(s)] 
0

這裏是一個一行使用列表理解這可能不是最好的選擇。

s = "I have 10 cars" 
print [item for sublist in [[x] if x.isdigit() else list(x) for x in s.split(" ")] for item in sublist] 
#Output 
['I', 'h', 'a', 'v', 'e', '10', 'c', 'a', 'r', 's'] 

基本上,你分割字符串成包含字符和數字列表的列表,那麼你壓扁名單,所有在列表理解的一舉。

相關問題