2012-10-12 141 views

回答

100

會變成這樣爲你的情況工作?

>>> s = '12abcd405' 
>>> result = ''.join([i for i in s if not i.isdigit()]) 
>>> result 
'abcd' 

這使得使用列表理解的,和這裏發生的一切與此類似結構:

no_digits = [] 
# Iterate through the string, adding non-numbers to the no_digits list 
for i in s: 
    if not i.isdigit(): 
     no_digits.append(i) 

# Now join all elements of the list with '', 
# which puts all of the characters together. 
result = ''.join(no_digits) 

由於@AshwiniChaudhary和@KirkStrauser指出,你其實並不需要使用括號內的單行,使圓括號內的一塊生成器表達式(比列表理解更有效)。即使這不適合你的任務的要求,這是你應該閱讀有關最終:):

>>> s = '12abcd405' 
>>> result = ''.join(i for i in s if not i.isdigit()) 
>>> result 
'abcd' 
+0

學到了新的字符串今天功能,謝謝rocketdonkey! –

+0

@SeanJohnson太棒了!我相信我從這個網站上的其他人那裏瞭解到,所以循環完成:) – RocketDonkey

+0

@RocketDonkey不需要'[]' –

2

我喜歡用正則表達式來做到這一點,但因爲你只能使用列表,循環功能等。

這裏就是我想出了:

stringWithNumbers="I have 10 bananas for my 5 monkeys!" 
stringWithoutNumbers=''.join(c if c not in map(str,range(0,10)) else "" for c in stringWithNumbers) 
print(stringWithoutNumbers) #I have bananas for my monkeys! 
1

如果我明白你的問題吧,做的一種方法是打破在字符字符串和然後使用一個循環是否是一個字符串或數字,並檢查每個字符在該字符串,然後如果字符串將它保存在一個變量,那麼一旦循環結束,顯示給用戶

+0

for循環自動遍歷字符串的每個字符,因此不需要將字符串拆分爲字符。 –

3

這個怎麼樣:

out_string = filter(lambda c: not c.isdigit(), in_string) 
2

說st是你未格式化的字符串,然後運行

st_nodigits=''.join(i for i in st if i.isalpha()) 

如上所述。 可是,我猜想,你需要的東西很簡單 這麼說小號是您的字符串 和st_res是沒有數字字符串,那麼這裏就是你的代碼

l = ['0','1','2','3','4','5','6','7','8','9'] 
st_res="" 
for ch in s: 
if ch not in l: 
    st_res+=ch 
12

不知道你的老師讓你使用過濾器,但...

filter(lambda x: x.isalpha(), "a1a2a3s3d4f5fg6h") 

returns-

'aaasdffgh' 

比循環更高效...

實施例:

for i in range(10): 
    a.replace(str(i),'') 
2

僅有數(他人提出了一些的這些)

方法1:

''.join(i for i in myStr if not i.isdigit()) 

方法2:

def removeDigits(s): 
    answer = [] 
    for char in s: 
     if not char.isdigit(): 
      answer.append(char) 
    return ''.join(char) 

方法3:

''.join(filter(lambda x: not x.isdigit(), mystr)) 

方法4:

nums = set(map(int, range(10))) 
''.join(i for i in mystr if i not in nums) 

方法5:

''.join(i for i in mystr if ord(i) not in range(48, 58)) 
+1

顯示這些效率比較是值得的。 –

65

而且,只是把它扔到組合,是經常被遺忘str.translate將工作比循環/正則表達式快得多:

對於Python 2:

from string import digits 

s = 'abc123def456ghi789zero0' 
res = s.translate(None, digits) 
# 'abcdefghizero' 

對於Python 3:

from string import digits 

s = 'abc123def456ghi789zero0' 
remove_digits = str.maketrans('', '', digits) 
res = s.translate(remove_digits) 
# 'abcdefghizero' 
+2

太棒了!我不知道。 – JayJay123

+9

這種方法在Python3中不起作用。代替: ''abc123def456ghi789zero0'.translate({ord(k):None for k in digits})' – valignatev

+2

Python2的最佳解決方案。 –