python - 列表推导,包括if和else /错误处理等条件

问题描述 投票:0回答:3

是否有一种简洁的方法来列出列表推导中的条件,以便执行以下操作:

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处理它是否更有效,如果条件还是在这种情况下还有其他/更好的错误处理方法?

延期:

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给出的字符串不包含在创建上面错误消息的列表中。

我想要的是:

如果index是一个交叉这样的数字,它应该将这个数字附加在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。还在检查如何解决这个问题

python list conditional-statements list-comprehension
3个回答
0
投票

我不太了解你要用这个代码做什么,但也许这会让你更近一点。

index = [data_filtered.append(data_time_filtered[s]) if next0 in s else missing_data.append(next0) for s in data_time_filtered]

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)

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部分包括更多的条件或循环。

© www.soinside.com 2019 - 2024. All rights reserved.