Python 基于其他两个列表的比较返回列表元素?

Python 基于其他两个列表的比较返回列表元素?,python,python-2.7,Python,Python 2.7,我试图根据两个其他列表之间的比较返回列表的元素 列表1是使用glob.glob(path)创建的文件名列表 列表2与第一个相同,但使用datetime.datetime.strtime将文件名解析为datetime。根据定义,它与第一个列表的长度相同 清单3类似于第二个列表,因为它是从文件名列表解析的日期时间列表。文件名列表是相关的,但长度不一定相同 我要做的是返回列表3中特定元素之前的文件名(列表1),该文件名对应于列表2中的最后一个日期时间。我知道,这让人困惑。很抱歉 我知道使用next是一

我试图根据两个其他列表之间的比较返回列表的元素

列表1是使用
glob.glob(path)
创建的文件名列表

列表2与第一个相同,但使用
datetime.datetime.strtime
将文件名解析为datetime。根据定义,它与第一个列表的长度相同

清单3类似于第二个列表,因为它是从文件名列表解析的日期时间列表。文件名列表是相关的,但长度不一定相同

我要做的是返回列表3中特定元素之前的文件名(列表1),该文件名对应于列表2中的最后一个日期时间。我知道,这让人困惑。很抱歉

我知道使用
next
是一种基于比较从列表返回值的快速方法,但我还没有找到一种使用它从比较之外的列表返回值的方法

以下是我所拥有的:

# get list of mat files and extract corresponding times
matFiles = []
matFileTimes = []
matFilePattern = re.compile('\\.*(\w*\s*\w*\s*)(\d+.\d+.\d+\s+\d+.\d+.\d+.\d+)(\s*\w*\s*\d*)?\.mat$')
for name in glob.glob(filePath[0] + '\*.mat'):
    event = re.search(matFilePattern, name)
    matFiles.append(event.group(0))
    matFileTimes.append(datetime.datetime.strptime(event.group(2),'%Y-%m-%d %H-%M-%S-%f'))

self.matFiles = sorted(matFiles)            
self.matFileTimes = sorted(matFileTimes)

if 'audio' in listdir(filePath[0]):
    audioFiles = []
    audioFileTimes = []
    audioFilePattern = re.compile('\\.*(\w*\s*\w*\s*)(\d+.\d+.\d+\s+\d+.\d+.\d+.\d+)?\.wav$')
    for name in glob.glob(path.join(filePath[0], 'audio') + '\*.wav'):
        audioEvent = re.search(audioFilePattern, name)
        audioFiles.append(audioEvent.group(0))
            audioFileTimes.append(datetime.datetime.strptime(audioEvent.group(2),'%Y-%m-%d %H-%M-%S-%f'))

    self.audioFiles = sorted(audioFiles)
    self.audioFileTimes = sorted(audioFileTimes)

    for each in audioFileTimes:
        self.eventMenu.addItem(datetime.datetime.strftime(each, '%b %d %Y, %I:%M:%S %p'))
else:
    for each in matFileTimes:
        self.eventMenu.addItem(datetime.datetime.strftime(each, '%b %d %Y, %I:%M:%S %p'))
然后稍后(在不同的类函数中):

如果listdir(self.filePath)中有“音频”:

fileToLoad=next(如果dt得到结果的最快方法是使用file time元素的索引,并使用与文件名列表相同的索引获得元素,则dt为反向的dt(self.matFileTimes):

if 'audio' in listdir(self.filePath):
    timeToLoad = next(dt for dt in reversed(self.matFileTimes) if dt <= self.audioFileTimes[self.eventMenu.currentIndex()])
    fileToLoad = self.matFiles[self.matFileTimes.index(timeToLoad)]
如果listdir(self.filePath)中有“音频”:

timeToLoad=next(如果dt不确定我是否理解正确,则使用反转(self.matFileTimes)中的dt表示dt。添加
fileToLoad=self.matFiles[self.matFileTimes.index(fileToLoad)]
。一个更容易处理的想法可能是将内容保存在dict FileTimes->Files中,而不是单独的列表中。实际上,这是可行的。dict的想法需要一些调整,但从长远来看可能是值得的。因此,我将其转化为一个答案。在途中更正了变量名。
if 'audio' in listdir(self.filePath):
    timeToLoad = next(dt for dt in reversed(self.matFileTimes) if dt <= self.audioFileTimes[self.eventMenu.currentIndex()])
    fileToLoad = self.matFiles[self.matFileTimes.index(timeToLoad)]