77384


# 問題

以下のリストがあります。

[code]

    word_list = ["東京", "人気", "お店", "メニュー", "焼肉", "定食", "300円", "期間", "限定", "焼肉", "単品", "250円", "焼肉",  "サラダ", "定食", "焼肉", "増量"]
    
[/code]

このリストに対して、以下のリストで比較を行います。

[code]

    s = ["焼肉", "定食"]
    
[/code]

word_listにある単語に対して`焼肉`,`定食`の順番に並んでいる箇所があった場合、word_listの`焼肉`と`定食`を結合して`焼肉定食`にしたいです。(リストの最後に追加するのではなく該当する位置で結合したいです)

最終的にはindex=4とindex=5のいちにある`焼肉`と`定食`が結合して`焼肉定食`にしたいです。

[code]

    # 最終的には以下のリストにしたい
    word_list = ["東京", "人気", "お店", "メニュー", "焼肉定食", "300円", "期間", "限定", "焼肉", "単品", "250円", "焼肉",  "サラダ", "定食", "焼肉", "増量"]
    
[/code]

このような処理を行うときに、効率よくやるような方法がある方教えてください。

また、word_listの該当箇所の単語を結合する方法もどうすればよいか困っています。

よろしくお願いします。

この質問はteratailにてマルチポストさせていただいております。  
<https://teratail.com/questions/342694>


CC BY-SA 4.0
2021-06-07T09:27:51.943
77382
2021-06-08T01:33:27.017
2021-06-08T01:33:27.017
44467
44467
question
python
Pythonのリストに同じ並びで並んでいる要素を見つけて結合したいのですがよい方法を教えてほしいです。


「焼肉」が見つかったら、リストのスライスを使ってそこから`len(s)`個を`s`と比較・置き換えするのがシンプルと思います。

[code]

    def replace(word_list, s):
        i = 0
        s2 = ''.join(s) # "焼肉定食"
        while i < len(word_list):
            if word_list[i] == s[0] and word_list[i:i+len(s)] == s:
                word_list[i:i+len(s)] = [s2]
            i += 1
    
[/code]


CC BY-SA 4.0
2021-06-07T10:41:02.377
77384
2021-06-07T10:41:02.377
9464
77382
answer


効率が良いのかどうかは不明ですが、以下の様な方法が考えられます。

[code]

    i, l = 0, len(word_list)-1
    while i < l:
      if word_list[i] =='焼肉' and word_list[i+1]=='定食':
        word_list[i:i+2] = ['焼肉定食']
        l -= 1
      i += 1
    
    print(word_list)
    
    # 実行結果
    ['東京', '人気', 'お店', 'メニュー', '焼肉定食', '300円', '期間', '限定', '焼肉', '単品', '250円', '焼肉', 'サラダ', '定食', '焼肉', '増量']
    
[/code]

単語を結合した場合に `word_list` の長さ(要素数)が一つ減りますので `l -= 1` を入れています。


CC BY-SA 4.0
2021-06-07T10:49:14.683
77385
2021-06-07T10:49:14.683
77382
answer