我試圖遍歷一個字串并在最長的重復相鄰值周圍標記 ()。例子:
“344556(7777)5412”
max_run = "0"
J = "34455677775412"
for x in range(len(J)-1):
if J[x] == J[x 1]
if J[x:x 2] > max_run:
print( "(", end = "")
max_run = J[x:x 2]
print( ")", end = "")
uj5u.com熱心網友回復:
該方法groupby從itertools標準庫的包中依次分組術語,然后取最大值。
import itertools as it
ref_string = "34455677775412"
max_squence = ''.join(max(list(j) for _, j in it.groupby(ref_string)))
print(ref_string.replace(max_squence, f'({max_squence})'))
uj5u.com熱心網友回復:
喜歡 itertools,但由于已經有一個(不錯的)解決方案groupby,這里有一個經典回圈:
J = "34455677775412"
run = []
prev = None
for pos, char in enumerate(J):
if char == prev:
run[-1][0] = 1
else:
run.append([1, pos])
prev = char
print(run)
a,b = max(run, key=lambda x: x[0])
J[:b] '(' J[b:b a] ')' J[b a:]
輸出: '344556(7777)5412'
uj5u.com熱心網友回復:
如果您不能使用任何標準庫方法,例如groupby,這里有一個執行相同操作的普通 Python 實作:
i = 0
max_start, max_end = 0, 0
J = "34455677775412"
# find the longest repeating sequence
while i < len(J):
j = i
while j < len(J) and J[j] == J[i]:
j = 1
max_start, max_end = max([(max_start, max_end), (i, j)], key=lambda e: e[1] - e[0])
i = j
print(max_start, max_end, J[max_start:max_end])
J = J[:max_start] "(" J[max_start:max_end] ")" J[max_end:] # insert the parentheses
print(J)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/349387.html
標籤:Python
上一篇:找不到表時如何優雅地處理pandasread_html?
下一篇:如何連載相冊中的第一張照片?姜戈
