潜在的に長さが異なる 2 つのリストがあります。各リストには、文字列形式のファイル名が含まれています。名前を制御することはできませんが、名前の構造は変更されないことを確信しています。常に name1_name2_number1_+(or-)number2.jpg のようなものになります
Number1 は、2 つのリスト間で一致させたい部分文字列です。1 つのリストのファイル名に他のリストのファイル名と同じ number1 が含まれている場合、これらのファイル名の両方を 3 番目のリストに追加します。特定のリストでnumber1を取得する単純な関数があります。たとえば、次のとおりです。
>>>list1 = ['serentity01_20malcolm_200_+3.jpg','inara03_kaley40_8000_-1.jpg']
>>>def GetNum(imgStrings):
... ss = []
... for b in imgStrings:
... ss.append([w for w in b.split('_') if w.isdigit()])
... #flatten zee list of lists because it is ugly.
... return [val for subl in ss for val in subl]
>>>GetNum(list1)
['200', '800]
だから、
>>>list1 = ['serentity01_20malcolm_200_+3.jpg','inara03_kaley40_8000_-1.jpg']
>>>list2 = ['inara03_summer40_8000_-2.jpg', 'book23_42jayne_400_+2.jpg', 'summer53_21simon_300_-1.jpg']
>>>awesomesauceSubstringMatcher(list1, list2)
['inara03_kaley40_8000_-1.jpg', 'inara03_summer40_8000_-2.jpg']
GetNum関数といくつかのリスト内包表記でそれを行うことができるはずだと感じていますが、「[何とか何とか…]」構文全体である気の利いたものは私にとって新しいものであり、私のものを完全にラップすることはできませんこれを回ってください。考え?提案?死の脅迫?事前のすべての有益な回答に感謝します。また、私のgooglefuが同様の質問/回答を見つけようとして失敗した場合は、何千もの謝罪をします。
編集 私はこの解決策を見つけました:
[str for str in list1+list2 if any(subs in str for subs in GetNum(list1)) and any(subs in str for subs in GetNum(list2))]
長くて醜いことはわかっていますが、リスト内包表記でそれができることを自分自身に証明したかったのです。役立つ回答をありがとうございます。