🌟

[Python] キーワードの配列から、キーワード2つずつの配列を作る

2022/08/14に公開約1,000字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に出現する場合なので、以下のようにすると重複の確認をせずに済むと思います。

LIST = ["りんご", "みかん", "ばなな", "めろん"]
word_group = []

for i, word1 in enumerate(LIST):
    for word2 in LIST[i:]:
        word_group.append([word1, word2])

print(word_group)

コメントありがとうございます
もっと簡潔な方法はあるだろうと思っていたものの、眼からうろこです!
[n:]この演算子いいですね

ログインするとコメントできます