比较两个列表并在必要时插入空值

Comparing two lists and inserting Nulls where necessary

我有两个列表,一个主列表和该列表的一个子集,我想将主列表与子集进行比较,然后在 python 中缺少子集的地方插入空值。

需要在竖线后分隔值,但在比较两个列表时并不重要。

主列表

["A", "B", "C", "D", "E", "F"]

子集

["A|1" , "D|41", "F|34", "F|54"]

期望的结果

["A|1","NULL","NULL","D|41","NULL","F|34", "F|54"]

欢迎任何帮助。

假设:

list1 = ['A', 'B', 'C', 'D', 'E', 'F']
list2 = ['A|1' , 'D|41', 'F|34']

创建要与之比较的列表

comp_list2 = [ x.split('|')[0] for x in list2 ]

select 共同价值观

result = [ list2[comp_list2.index(x)] if x in comp_list2 else "NULL" for x in list1 ] # Better Replace "NULL" with None

print result

['A|1', 'NULL', 'NULL', 'D|41', 'NULL', 'F|34']

瞧瞧

如果您不想创建额外的列表,您可以使用此方法,但投票最高的答案会更快

代码:

inp_check=["A|1" , "D|41", "F|34"]
inp_master=["A","B", "C", "D", "E", "F"]
print [next((value2 for value2 in inp_check if value in value2 ) ,"null") for value in inp_master]

输出:

['A|1', 'null', 'null', 'D|41', 'null', 'F|34']

编辑:

代码1:

inp_check=["A|1" , "D|41", "F|34", 'F|56']
inp_master=["A","B", "C", "D", "E", "F"]
output=[]
for value in inp_master:
    check=0
    for check_value in inp_check:
        if value in check_value:
            check=1
            output.append(check_value)
    if check ==0:
        output.append("NULL")
print output

输出:

['A|1', 'NULL', 'NULL', 'D|41', 'NULL', 'F|34', 'F|56']

这是一个实际执行问题中要求的方法,将值插入到原始列表而不是创建新列表。

master = ["A", "B", "C", "D", "E", "F", "G"]
sub = ["A|1" , "D|41", "F|34"]

for i, elem in enumerate(master):
     try:
         next_ = sub[i]
     except IndexError:
         next_ = ''
     if not next_.startswith(elem):
         sub.insert(i, 'Null')