我正在連續輸入用戶輸入的字符串,然後嘗試刪除任何不是字符或數字的字符。將列表轉換爲字符串
我開發的方法涉及到用空格分割字符串,然後分析每個單詞以查找無效字符。
我很難把單詞與每個單詞之間的空格放在一起。我試過使用''.join(list),但它在每個字符或數字之間放置一個空格。
我正在連續輸入用戶輸入的字符串,然後嘗試刪除任何不是字符或數字的字符。將列表轉換爲字符串
我開發的方法涉及到用空格分割字符串,然後分析每個單詞以查找無效字符。
我很難把單詞與每個單詞之間的空格放在一起。我試過使用''.join(list),但它在每個字符或數字之間放置一個空格。
當然,@阿什維尼的答案是比這更好的,但如果你仍然想只是循環做
strings = raw_input("type something")
while(True):
MyString = ""
if strings == "stop": break
for string in strings.split():
for char in string:
if(char.isalnum()): MyString += char
MyString += " "
print MyString
strings = raw_input("continue : ")
樣品運行
$ python Test.py
type somethingWelcome to$%^ Python
Welcome to Python
continue : I love numbers 1234 but not [email protected]#$
I love numbers 1234 but not
continue : stop
EDIT
的Python 3版本:
作爲評價表明通過阿什維尼,在列表存儲字符和打印列表的,並在最後加入。
strings = input("type something : ")
while(True):
MyString = []
if strings == "stop": break
for string in strings.split():
for char in string:
if(char.isalnum()): MyString.append(char)
MyString.append(" ")
print (''.join(MyString))
strings = input("continue : ")
樣品試驗:
$ python3 Test.py
type something : abcd
abcd
continue : I love Python 123
I love Python 123
continue : I hate [email protected]#
I hate
continue : stop
我運行了你的代碼並得到了不同的輸出。是因爲我使用python 3嗎? –
請注意,使用'+'或'+ ='完成的字符串連接相當[效率低下](http://wiki.python.org/moin/PythonSpeed/PerformanceTips#String_Concatenation),將字符附加到列表並使用最後加入。 –
@HarryHarry用'input'替換'raw_input'並在py3.x中使用'print'作爲函數 –
strs = "foo12 #$dsfs 8d"
ans = []
for c in strs:
if c.isalnum():
ans.append(c)
elif c.isspace(): #handles all types of white-space characters \n \t etc.
ans.append(c)
print ("".join(ans))
#foo12 dsfs 8d
使用str.translate
:
>>> from string import punctuation, whitespace
>>> "foo12 #$dsfs 8d".translate(None,punctuation)
'foo12 dsfs 8d'
要刪除的空白,以及:
>>> "foo12 #$dsfs 8d".translate(None,punctuation+whitespace)
'foo12dsfs8d'
或regex
:
>>> import re
>>> strs = "foo12 #$dsfs 8d"
>>> re.sub(r'[^0-9a-zA-Z]','',strs)
'foo12dsfs8d'
使用str.join
,str.isalnum
和str.isspace
:
>>> strs = "foo12 #$dsfs 8d"
>>> "".join([c for c in strs if c.isalnum() or c.isspace()])
'foo12 dsfs 8d'
我不認爲我可以使用翻譯。是否有可能以另一種方式做到這一點? –
@HarryHarry'str.translate'有什麼問題? –
這是我的教授的一個規則。如果我們沒有在課堂上介紹它,那麼它就不能使用。 –
這是我的解決方案。看評論的更多信息:
def sanitize(word):
"""use this to clean words"""
return ''.join([x for x in word if x.isalpha()])
n = input("type something")
#simpler way of detecting stop
while(n[-4:] != 'stop'):
n += " " + input("continue : ")
n = n.split()[:-1]
# if yuo use list= you are redefining the standard list object
my_list = [sanitize(word) for word in n]
print(my_list)
strn = ' '.join(my_list)
print(strn)
你可以做到這一點,並加入列表理解。
def goodChars(s):
return " ".join(["".join([y for y in x if y.isdigit() or y.isalpha()]) for x in s.split()])
而不是'''.join(string)'你可以簡單地完成'''.join(string)'。 (但是你的具體問題可以更容易解決) – Kos
這段代碼不起作用。第一次在它之後沒有任何縮進 –
我複製並粘貼了我的代碼,但我不得不使用4個空格縮進。我的一些標籤沒有顯示出來。 –