[英]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.