比较两个列表并在必要时插入空值
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')
我有两个列表,一个主列表和该列表的一个子集,我想将主列表与子集进行比较,然后在 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')