是否有一种巧妙的方法将条件包括在列表推导中以便执行以下操作:
index = [y for y, s in enumerate(data_time_filtered) if next0 in s]
我想在上面的索引定义中添加以下条件:
if next0 in s:
data_filtered.append(data_time_filtered[index[0]])
else:
missing_data.append(next0)
当前我的代码中发生的是:
IndexError: list index out of range
当找不到该值时。在其他情况下是否可以更有效地处理它,或者在这种情况下是否还有其他/更好的错误处理方法?
扩展:
data_time_filtered
是一个字符串列表,例如:
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/002/MYD021KM.A2018002.1330.006.2018003152138.hdf
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/004/MYD021KM.A2018004.1330.006.2018005220236.hdf
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/006/MYD021KM.A2018006.1330.006.2018007165439.hdf
https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/009/MYD021KM.A2018009.1330.006.2018010190624.hdf
next0
是以下形式的字符串:/XXX/
,例如/002/
index函数正在data_time_
中筛选出next0
出现的行,并返回一个索引,该索引用于提取该行并将其附加到另一个列表中。
问题在于,有时next0
给出的字符串不包含在上面创建错误消息的列表中。
我想要的是:
如果索引与这样的数字交叉,则应将此数字附加在missing_data
列表中,而不要破坏并产生错误。
更新:
我尝试过:
try:
index = [y for y, s in enumerate(data_time_filtered) if next0 in s]
data_filtered.append(data_time_filtered[index[0]])
except IndexError:
missing_data.append(next0)
,它起作用了:)。但是,在稍后的另一行中,发生IndexError。仍在检查如何解决
答案 0 :(得分:0)
我不太了解您要如何使用此代码,但这也许会使您更接近。
index = [data_filtered.append(data_time_filtered[s]) if next0 in s else missing_data.append(next0) for s in data_time_filtered]
答案 1 :(得分:0)
我试图满足您的要求-让我知道以下代码是否有帮助,
data_time_filtered = [
'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/002/MYD021KM.A2018002.1330.006.2018003152138.hdf',
'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/004/MYD021KM.A2018004.1330.006.2018005220236.hdf',
'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/006/MYD021KM.A2018006.1330.006.2018007165439.hdf',
'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MYD021KM/2018/009/MYD021KM.A2018009.1330.006.2018010190624.hdf']
# combinations of exist & non-exist values
next0_list = ['/002/', '/004/', '/111/', '/222/']
data_filtered = list()
missing_data = list()
# for next0 in next0_list:
# index = [data_filtered.append(s) for s in data_time_filtered if next0 in s]
# if not index:
# missing_data.append(next0)
index = [missing_data.append(next0) for next0 in next0_list if
not [data_filtered.append(s) for s in data_time_filtered if next0 in s]]
print(missing_data)
print(data_filtered)
答案 2 :(得分:0)
没有将条件放入index
的定义中,而是发现错误处理如下:
try:
index = [y for y, s in enumerate(data_time_filtered) if next0 in s]
data_filtered.append(data_time_filtered[index[0]])
except IndexError:
missing_data.append(next0)
更实用,因为可以在except IndexError
部分中包含更多条件或循环。