2016-08-30 125 views
1
Input : "A32B45C3" 
Output : letters = [ "A", "B", "C"] 
    numbers = ["32","45","3"] 

我嘗試使用如何將字符串分別分成兩個數字和字母列表?

code = "A32B45C3" 
letters = [] 
numbers = [] 
for i in code: 
    if i.isalpha() == True: 
     letters.append(i) 
    elif i.isdigit() == True: 
     numbers.append(i) 

print letters 
print numbers 

,但我得到數= [ 「3」, 「2」, 「4」, 「5」, 「3」]代替[ 「32」,「45 「,」3「]

+0

你只需要輸入字符串字母數字符號? –

+0

不,只是字母和數字@WiktorStribiżew –

+0

這裏有一些很好的答案。 –

回答

0

您當前的方法存在的問題是,您正在按字符處理字符串並收集個人字母和數字。

相反,你可以使用re.findall()找到下面大寫字母一個或多個數字,然後選擇「解壓」的成果轉化爲字母和數字分別:

>>> import re 
>>> 
>>> s = "A32B45C3" 
>>> letters, numbers = zip(*re.findall(r"([A-Z])([0-9]+)", s)) 
>>> letters 
('A', 'B', 'C') 
>>> numbers 
('32', '45', '3') 
0

試試這個,

import re 
input = "A32B45C3" 
letters = filter(None,re.split('[0-9]',input)) 
numbers = filter(None,re.split('[A-Z]',input)) 
1

爲你創建一個小代碼,Incase你不想使用正則表達式。

您可以進一步優化它:

a = "A32B45C3" 

numbers = [] 
strings = [] 
same_as_prev = True 
tmp = '' 
for i in a: 
    if tmp: 
     same_as_prev = tmp.isalpha() == i.isalpha() 
    if same_as_prev: 
     tmp += i 
    else: 
     if tmp.isalpha(): 
      strings.append(tmp) 
     else: 
      numbers.append(tmp) 
     tmp = i 
     same_as_prev = True 

# Insert unused tmp. 
if tmp: 
    if tmp.isalpha(): 
      strings.append(tmp) 
    else: 
     numbers.append(tmp)  

print numbers 
print strings 
相關問題