繁体   English   中英

如何过滤特定索引处条目的嵌套列表?

[英]How to filter a nested list for an entry at an specific index?

我有一个嵌套列表,每个子列表都包含三个条目。

列表的第二个条目(在index [1]处)是日期。 如果没有日期,则有一个条目“无日期”。

现在我想根据这个日期过滤子列表。 每个不是 2019 年和 2018 年的条目都应该被过滤掉。 此外,我还想要没有日期的条目。

但是,使用我的代码,我只能得到没有日期的条目。

清单样本:

lim = [
        ['xxx', 'No-Date', 'xxx'],
        ['xxx', '2019-12-08', 'xxx'],
        ['xxx', '2019-07-12', 'xxx'],
        ['xxx', '2018-11-13', 'xxx'],
        ['xxx', '2017-10-03', 'xxx'],
        ['xxx', '2016-01-05', 'xxx'],
        ['xxx', '2019-10-24T15:09:00+02:00', 'xxx'],
       ]

代码作为循环:

li_zj = []
filter1 = ['2019-', '2018-', 'No-Date']
for line in lim:
    for x in line:
        for f in filter1:
            if x in f:
                li_zj.append(line)
print(li_zj)

作为列表理解的代码:

filter1 = ['2019-', '2018-', 'No-Date']
li_zj = [x for x in lim if any(f in x for f in filter1)]
print(li_zj)

所需的 output:

li_zj = [
         ['xxx', 'No-Date', 'xxx'],
         ['xxx', '2019-12-08', 'xxx'],
         ['xxx', '2019-07-12', 'xxx'],
         ['xxx', '2018-11-13', 'xxx'],
         ['xxx', '2019-10-24T15:09:00+02:00', 'xxx'],
        ]

我怎样才能正确地做到这一点?

使用str.startswith和简单的列表理解:

date_filter = ('2019-', '2018-', 'No-Date')
res = [x for x in lim if x[1].startswith(date_filter)]
print(res)

output:

[['xxx', 'No-Date', 'xxx'],
 ['xxx', '2019-12-08', 'xxx'],
 ['xxx', '2019-07-12', 'xxx'],
 ['xxx', '2018-11-13', 'xxx'],
 ['xxx', '2019-10-24T15:09:00+02:00', 'xxx']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM