Re: [問題] 比較並取代字串的文字

看板Python作者 (0.0)時間9年前 (2016/03/09 01:24), 編輯推噓5(5018)
留言23則, 7人參與, 最新討論串2/2 (看更多)
※ 引述《eric2853 (eric)》之銘言: : 大家好 : 我是一個剛學python沒多久的初學者 : 因為本身是生物相關背景 所以未來想利用python做一些比較跟計算 : 例如我想要比較兩個DNA序列中 有哪些不一樣的地方 : 若是序列相同 則將他取代成"." : 例如 : a = "atcgatcgaaa" : b = "atccagcgaac" : 則print出 兩段序列 : "...g.t....a" : "...c.g....c" : 以下是我的練習code: : a = "atcgatcgaaa" : b = "atccagcgaac" 這邊for的用法有問題 python迴圈可以用集合的概念來想 for [element] in [set]: #.... 碰到不熟的語言 你可以用print去確認你的code到底發生了什麼事 for i in a[i]: print (i) # print element in set a[i] : for i in a[i]: #利用元素位置去找 你似乎不太清楚i變數到底代表什麼 : if a[i] == b[i]: # 你在這邊把i當成數字 : c = a.replace(i,".") # 你在這邊把i當char : d = b.replace(i,".") 另外我不建議你使用replace,他會取代複數個字 : print(c,d) : 可是都會出現錯誤代碼 string indices must be integers : 我其實看不太懂他想表達的意思 : 請問各位前輩我該如何改我的code : 非常謝謝大家 最後附上弱弱的code a = "atcgatcgaaa" b = "atccagcgaac" a_list = list(a) # List是python很基礎的結構 建議熟悉它 b_list = list(b) # 轉成List是因為list才能作assign的操作 (a_list[i] = '.') for i in range(len(a)): # 在這邊我把i當數字,請注意a長度必需與b相等 if a_list[i] == b_list[i]: a_list[i] = '.' b_list[i] = '.' a = "".join(a_list) # 將list轉回string b = "".join(b_list) print(a) print(b) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.178.157 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1457457862.A.260.html

03/09 01:46, , 1F
其實我剛剛在自己練習時有發現我i那邊搞錯 主要是數字
03/09 01:46, 1F

03/09 01:46, , 2F
跟字串的不同 不過我的主要問題還是在如何取代 真的非常
03/09 01:46, 2F

03/09 01:46, , 3F
感謝你詳細的說明 我還太初學 基礎要好好打了 再次謝謝
03/09 01:46, 3F

03/09 01:46, , 4F
03/09 01:46, 4F

03/09 02:09, , 5F
range(min(len(a), len(b)))
03/09 02:09, 5F

03/09 15:04, , 6F
"".join( u if u == v else "." for u,v in zip(a,b) )
03/09 15:04, 6F

03/10 11:24, , 7F
樓上的條件反了樓上的條件反了
03/10 11:24, 7F

03/10 20:31, , 8F
也可以直接用字串型式來處理
03/10 20:31, 8F

03/10 20:31, , 9F
a = "atcgatcgaaa"
03/10 20:31, 9F

03/10 20:31, , 10F
b = "atccagcgaac"
03/10 20:31, 10F

03/10 20:32, , 11F
aa = ""
03/10 20:32, 11F

03/10 20:32, , 12F
bb = ""
03/10 20:32, 12F

03/10 20:32, , 13F
for i in range(len(a)):
03/10 20:32, 13F

03/10 20:32, , 14F
if a[i] == b[i]:
03/10 20:32, 14F

03/10 20:32, , 15F
aa += "."
03/10 20:32, 15F

03/10 20:32, , 16F
bb += "."
03/10 20:32, 16F

03/10 20:33, , 17F
else:
03/10 20:33, 17F

03/10 20:33, , 18F
aa += a[i]
03/10 20:33, 18F

03/10 20:33, , 19F
bb += b[i]
03/10 20:33, 19F

03/10 20:33, , 20F
print aa
03/10 20:33, 20F

03/10 20:33, , 21F
print bb
03/10 20:33, 21F

03/10 23:10, , 22F
樓上開銷略大,join較佳
03/10 23:10, 22F

03/11 00:08, , 23F
bibo9901 的解法不錯....
03/11 00:08, 23F
文章代碼(AID): #1Mtmh69W (Python)
文章代碼(AID): #1Mtmh69W (Python)