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

作者: iyaicharles (0.0)   2016-03-09 01:24:19
※ 引述《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)
作者: eric2853 (eric)   2016-03-09 01:46:00
其實我剛剛在自己練習時有發現我i那邊搞錯 主要是數字跟字串的不同 不過我的主要問題還是在如何取代 真的非常感謝你詳細的說明 我還太初學 基礎要好好打了 再次謝謝你
作者: tiefblau (tiefblau)   2016-03-09 02:09:00
range(min(len(a), len(b)))
作者: bibo9901 (function(){})()   2016-03-09 15:04:00
"".join( u if u == v else "." for u,v in zip(a,b) )
作者: s06yji3 (阿南)   2016-03-10 11:24:00
樓上的條件反了樓上的條件反了
作者: Ziom (Oquainogen)   2016-03-10 20:31:00
也可以直接用字串型式來處理a = "atcgatcgaaa"b = "atccagcgaac"aa = ""bb = ""for i in range(len(a)):if a[i] == b[i]:aa += "."bb += "."else:aa += a[i]bb += b[i]print aaprint bb
作者: IKAFIRE (沒有)   2016-03-10 23:10:00
樓上開銷略大,join較佳
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2016-03-11 00:08:00
bibo9901 的解法不錯....

Links booklink

Contact Us: admin [ a t ] ucptt.com