如何通过比较两个列表将缺少的元素添加到第二个列表中

2024-09-27 21:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,其中包含datewise数据,并希望通过与list1比较,在list2中添加日期的缺失数据

列表如下

 list1=['2019-06-01', '2019-06-02', '2019-06-03', '2019-06-04', '2019-06-05']
 list2=[['2019-06-01','3'], ['2019-06-02','0'],['2019-06-04','1'], ['2019-06-05', '4']]

这里的list2中不包含2019-06-03的数据,因此希望将该日期的缺失数据添加到list2中,其中包含空值,list2的最终值如下所示

list2=[['2019-06-01','3'], ['2019-06-02','0'],['2019-06-03','']['2019-06-04','1'], ['2019-06-05', '4']]

下面是我试图将缺少的值放到另一个列表中的代码

 for a, b in itertools.izip_longest(list1,list2):
     if a!=b[0]:
         print a

上面印的是

  2019-06-03
  2019-06-04
  2019-06-05

有人能给我带路吗


Tags: 数据代码in列表forlongestif空值
3条回答
dates_in_list2 = [x[0] for x in list2]
missing_data = [[x, ''] for x in list1 if x not in dates_in_list2]
list2.extend(missing_data)

您可以使用集合来查找^{},并从结果中添加一个新的子列表:

list2 += [list(set(list1).difference([i[0] for i in list2])) + ['']]

print(list2)

[['2019-06-01', '3'],
 ['2019-06-02', '0'],
 ['2019-06-04', '1'],
 ['2019-06-05', '4'],
 ['2019-06-03', '']]

这是一种使用itertools.chainset的方法

例如:

from itertools import chain

list1=['2019-06-01', '2019-06-02', '2019-06-03', '2019-06-04', '2019-06-05']
list2=[['2019-06-01','3'], ['2019-06-02','0'],['2019-06-04','1'], ['2019-06-05', '4']]

check_val = set(chain.from_iterable(list2))

for i in list1:
    if i not in check_val:
        list2.append([i, ""])
print(list2)
print(sorted(list2, key=lambda x: x[0]))

输出:

[['2019-06-01', '3'], ['2019-06-02', '0'], ['2019-06-04', '1'], ['2019-06-05', '4'], ['2019-06-03', '']]
[['2019-06-01', '3'], ['2019-06-02', '0'], ['2019-06-03', ''], ['2019-06-04', '1'], ['2019-06-05', '4']]

相关问题 更多 >

    热门问题