我有兩個列表,可能具有不同的長度。每個列表都包含字符串形式的文件名。我無法控制名稱,但我確信名稱結構不會改變。它總是類似於name1_name2_number1 _ +(或 - )number2.jpg查找包含子字符串的兩個列表中的元素
Number1是我想在兩個列表之間匹配的子字符串。如果一個列表中的文件名包含與另一個列表中的文件名相同的number1,我想將這兩個文件名追加到第三個列表中。我有一個簡單的函數,將獲得數字1在一個給定的列表,如:
>>>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))]
我知道它的長和醜陋,但我真的想證明自己,這可能與列表理解來完成。感謝所有有用的迴應!
沒有使用過多的map-reduce :) – GodMan 2013-03-15 19:24:53