🌟
[Python] キーワードの配列から、キーワード2つずつの配列を作る
このようなキーワードの配列から
LIST = ["りんご", "みかん", "ばなな", "めろん"]
キーワード2つずつの配列を作る。
ルール1 同じキーワード同士も可。
['みかん', 'みかん']
ルール2 順番違いはまとめる。
[ ['みかん','りんご'], ['りんご','みかん'] ] 👉 [ ['みかん','りんご'] ]
出来上がりはこちら
LIST = ["りんご", "みかん", "ばなな", "めろん"]
word_group = []
for word1 in LIST:
for word2 in LIST:
# グループを作成
_group = [ word1, word2 ]
# word_groupがカラの場合は無条件で追加
if len(word_group) == 0:
word_group.append(_group)
else:
# 順番を反転したグループを作成
_group_reverse = [ word2, word1 ]
# チェック用の変数
_check = True
# word_groupをループ
for elm in word_group:
# もし反転したグループが既にword_groupに存在したら、_checkをFalseに
if set(elm) == set(_group_reverse):
_check = False
break
# もし_checkがTrueだったら、word_groupに追加
if _check:
word_group.append(_group)
print( word_group )
出力結果
[['りんご', 'りんご'], ['りんご', 'みかん'], ['りんご', 'ばなな'], ['りんご', 'めろん'], ['みかん', 'みかん'], ['みかん', 'ばなな'], ['みかん', 'めろん'], ['ばなな', 'ばなな'], ['ばなな', 'めろん'], ['めろん', 'めろん']]
Discussion
順番違いの重複が起こるのは
word1
ですでに確認した要素がword2
に出現する場合なので、以下のようにすると重複の確認をせずに済むと思います。コメントありがとうございます
もっと簡潔な方法はあるだろうと思っていたものの、眼からうろこです!
[n:]この演算子いいですね