2020年5月22日 星期五

python 字串處理

#####################################
s="0123456789"
print(s[:5])
print(s[:5:2])
s.find("2") #  找字

#####################################
# 印出三角*
for i in range(0,10):
    for j in range(0,i+1):
        print("*",end="") # 不換行
    print("")

#####################################
#Longest Common SubSequence
import numpy as np

S1="abcdefg"
S2="abzzcdzzefg"
L1 = list(S1)
L2 = list(S2)
#補零作為起始
L1.insert(0,"0")
L2.insert(0,"0")
A = np.zeros((len(L1), len(L2)), dtype=np.int)
#初始值
for i in range(0,len(L1)):
    A[i,0] = -i
for j in range(0,len(L2)):
    A[0,j] = -j
#計算距離矩陣
for i in range(1,len(L1)):
    for j in range(1,len(L2)):
        if L1[i] == L2[j]:
            A[i,j] = A[i-1,j-1] + 2
        else:
            A[i,j] = max(A[i-1,j-1],A[i,j-1],A[i-1,j]) - 1

#回溯字串
i = len(L1)-1
j = len(L2)-1
LCS1 = ""
LCS2 = ""
while i > 0 and j > 0:
    #左上
    if A[i-1,j-1] >= max(A[i,j-1],A[i-1,j]):
        LCS1 = L1[i] + LCS1
        LCS2 = L2[j] + LCS2
        i = i - 1
        j = j - 1
    #左
    elif A[i,j-1] >= A[i-1,j]:
        LCS1 = "-" + LCS1
        LCS2 = L2[j] + LCS2
        j = j - 1
    #上
    else:
        LCS1 = L1[i] + LCS1
        LCS2 = "-" + LCS2
        i = i - 1

while i > 0:
    LCS1 = L1[i] + LCS1
    LCS2 = "-" + LCS2
    i = i - 1

print("輸入的字串")
print(S1)
print(S2)
print("輸出的字串")
print(LCS1)
print(LCS2)
print("共同的字串")
for i in range(0,len(LCS1)):
    if LCS1[i] == LCS2[i]:
        print(LCS1[i],end="")

沒有留言:

張貼留言