iT邦幫忙

1

python 字串切割

  • 分享至 

  • xImage

[[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]

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
jeffeux
iT邦新手 4 級 ‧ 2023-02-22 14:52:58

直接用 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])
2
kennex_x
iT邦新手 4 級 ‧ 2023-02-22 15:59:39

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)
1
JamesDoge
iT邦高手 1 級 ‧ 2023-02-22 20:15:23
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]

我要發表回答

立即登入回答