【发布时间】:2019-02-20 00:46:01
【问题描述】:
是否有一种巧妙的方法可以在列表推导中包含条件以执行以下操作:
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
当找不到值时。使用 else 和 if 条件处理它是否更有效,或者在这种情况下是否有另一种/更好的错误处理方式?
扩展:
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/
索引函数正在寻找data_time_filtered 中出现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。仍在检查如何解决这个问题
【问题讨论】:
-
这里有两个不同的列表要创建
-
@Bazingaa 你的意思是missing_data 列表?是的当然。但我想知道是否可以在索引定义中添加 if 和 else 条件
-
能否请您添加一些示例值列表和所需的输出。很容易理解您的要求。
-
目前还不清楚您到底想要什么。提供一些示例输入/输出。我认为您想要的是生成两个不同列表的单行列表理解。我不认为可以这样做,因为在列表理解代码的左侧,您将有一个列表名称。
标签: python list conditional-statements list-comprehension