[[146 300]][[131 297]] [[132 298]][[147 287]][[143 284]] [[144 285]]
要怎麼把[[]]變成999
[146, 300, 999, 131, 297, 132, 298, 999, 147, 287, 999, 143, 284, 144, 285]
直接用 replace?
因為感覺只有 ']][['
(不是 [[]]
) 需要被取代,但 ']] [['
不用
然後取代完之後把數字按照分隔一字排開
# 這是輸入的字串
input_data = (
"[[146 300]][[131 297]] [[132 298]]" +
"[[147 287]][[143 284]] [[144 285]]")
def solution(input_data: str) -> list:
nums_str = (
# 先進行取代 `]][[` 的步驟
input_data.replace(']][[', ' 999 ')
# 然後把剩下的 `[` 跟 `]`
# 都變成區分數字的空白
.replace('[', ' ')
.replace(']', ' ')
).split() # 最後按照空白分開
# 然後答案就是把每個數字 string 轉成 int
result = [int(num) for num in nums_str]
return result
# print 結果
print(solution(input_data))
# 確認答案跟題目要求的相同
assert (
solution(input_data)
== [146, 300, 999, 131, 297, 132, 298,
999, 147, 287, 999, 143, 284, 144, 285])
Dears,
根據題目是要將只要]][[
替換成999
,
所以只需要用.replace
即可解決,
我的處理過程中,在去掉不要的符號以後再以空格作替代,
最後再利用.split
的方式將以空格做切割成list。
txt = "[[146 300]][[131 297]] [[132 298]][[147 287]][[143 284]] [[144 285]]"
def txt_split(txt):
txt = txt.split(" ")
result = ""
for i in txt:
if "]][[" in i:
i = i.replace("]][["," 999 ")
else:
i = i.replace("[[","").replace("]]"," ")
if i[-1] == " ":
result += i
else:
result += i + " "
result = result.split(" ")[:-1]
return result
txt_split(txt)
s = '[[146 300]][[131 297]] [[132 298]][[147 287]][[143 284]] [[144 285]]'
# 將字串以空格切割
tokens = s.split()
result = []
for token in tokens:
if token == '[[]]':
result.extend([999])
else:
# 將 '[[146 300]]' 轉換為 [146, 300]
numbers = [int(number) for number in token[2:-2].split()]
result.extend(numbers)
print(result)
程式輸出:
[146, 300, 999, 131, 297, 132, 298, 999, 147, 287, 999, 143, 284, 144, 285]