前提
指定した文字列と前方一致しており、なおかつ単語が一つ足されている要素を取得したいです。
「A,B,C」という文字列があるとして、「A,B,C,D」という一つ単語が付け足された文字列を取得したいです(「A,B,C,D,E」以降は不要)。
下記のコードの通り、それ自体は実現できているのですが、大きいデータを扱うとなると二重ループがあまりにも大きくなってしまいます。
そのためできれば二重ループを使用せずに、リストから直接ほしい文字列を取得できる方法を探しているのですが、良い改善方法はありますでしょうか? ご助言をしていただければ幸いです。
Python
1 2 sentence=["私,は", "私,は,学生", "私,は,学生,です", 3 "私,は","私,は,私", "私,は,私,に","私,は,私,に,ご褒美","私,は,私,に,ご褒美,を","私,は,私,に,ご褒美,を,あげ","私,は,私,に,ご褒美,を,あげ,ま","私,は,私,に,ご褒美,を,あげ,ま,した"] 4#要素内の単語同士は「,」で結合されています。 5#実際に扱っているsentenceは50万要素以上あります 6 7#文字列alphaが前方一致しており、単語が一つ足されているものをbetaとする 8#betaを最大で3つまで取得したら、次のalphaに移行する 9#完全一致の文字列は除外 10 11 for word_alpha in sentence: 12 13 beta_candidate=[] #beta候補取得 14 15 alpha_length=len(word_alpha.split(",")) 16 17 #文字列alphaに対応するbetaを取得。3回取得 18 19 for word_beta in sentence: 20 if len(beta_candidate)<3: #betaを3回取得できるまでループ 21 beta_length=len(word_beta.split(",")) #単語列の長さを取得 22 23 #前方一致&文字列alphaよりちょうど単語一個分多かったらTrue 24 if word_beta.startswith(word_alpha) and (beta_length==alpha_length+1): 25 beta_candidate.append(word_beta) 26 27 if word_alpha in beta_candidate: #alphaとbetaが完全一致のものは除外 28 beta_candidate.remove(word_beta) 29 30 print(word_alpha,beta_candidate)
補足情報(FW/ツールのバージョンなど)
Goggle の Colabを利用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/20 07:59