[英]remove blank characters from a string in python
我有嵌套列表。在此列表中,每個嵌套列表都包含兩個組件,每個組件可能包含空格('')字符。我想刪除並編寫一段代碼,但無法使其正常工作。我如何克服這個問題有問題嗎?
嵌套的List列表為:
[['bike', '2 * wheel+1* frame'], ['wheel', '1 * rim + 1* spoke +1 *hub'], ['rim', 60], ['spoke', 120], ['hub', '2*gear+1*axle'], ['gear', 25], ['axle', '5*bolt+7*nut'],['bolt',0.1], ['nut', 0.15],['frame', '1*rearframe+ 1*frontframe'],['rearframe', 175],['frontframe', '1*fork+2*handle'], ['fork', 22.5],['handle', 10.0]]
如圖所示,某些字符串中有一些空格。
我寫的python代碼:
def blanks(des):
a = 0
while a < len(des):
if type(des[0][1]) == str:
des[0][0] = des[0][0].replace(' ','')
if type(des[0][1]) == str:
des[0][1] = des[0][1].replace(' ','')
a += 1
return des
請使用for
循環。
def blanks(lis):
for i, _ in enumerate(lis):
for j in range(2):
if isinstance(lis[i][j], str):
lis[i][j] = lis[i][j].replace(' ', '')
return lis
列表理解也將起作用。
def blanks(lis):
return [i.replace(' ', '') if isinstance(i, str) else i for a in lis for i in a]
或者只是沒有函數定義:
lis = [[i.replace(' ', '') if isinstance(i, str) else i for i in a] for a in lis]
我認為這應該做您想要的。 但是,如果嵌套列表的深度不一致,則最好使用生成器函數。
def blanks(lis):
for i, el in enumerate(lis):
if isinstance(el, list):
blanks(el)
elif isinstance(el, str):
yield el.replace(' ', '')
else:
yield el
另請參閱此答案以獲取有關最后一段代碼的更多信息。
這將是一種方法:
map(lambda x:map(lambda y:y.replace(' ','') if isinstance(y,str) else y,x),a)
其中a
是您傳遞的輸入列表。
好的,因為沒有限制或任何固定的參數,您將不得不使用一點遞歸來解決您的問題。
def trimSpaces(list):
for i in range(0,len(list)):
if type(list[i]) == str:
list[i] = list[i].replace(' ','')
elif type(list[i]) == type([]):
list[i] = trimSpaces(list[i])
else:
continue
return list
嘗試這個:
def removeBlanks(input):
if type(input) is list:
ret=[]
for i in input:
ret.append(removeBlanks(i))
else:
ret=input.replace(" ", "")
return ret
在python中,您通常希望遵循EAFP並捕獲異常,而不是使用isinstance
預先驗證輸入:
def no_blanks(s):
try:
return s.replace(' ', '')
except AttributeError:
return s
ls = [['bike', '2 * wheel+1* frame'], ['wheel', '1 * rim + 1* spoke +1 *hub'], ['rim', 60], ['spoke', 120], ['hub', '2*gear+1*axle'], ['gear', 25], ['axle', '5*bolt+7*nut'],['bolt',0.1], ['nut', 0.15],['frame', '1*rearframe+ 1*frontframe'],['rearframe', 175],['frontframe', '1*fork+2*handle'], ['fork', 22.5],['handle', 10.0]]
new_ls = [[no_blanks(a), no_blanks(b)] for a, b in ls]
在我看來,也仔細查看您的列表, dict
可能是您數據的更好選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.