我有两个列表,可能具有不同的长度。每个列表都包含字符串形式的文件名。我无法控制名称,但我确信名称结构不会改变。它总是类似于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