我有一个完整的列表:f = [A,B,C,D,E]
.
和短列表:s = [A,B,D]
我想从完整列表中得到short list
+all rest values
的结果列表,短列表中没有。
结果应该是:
nlist = [A,B,D,C,E]
我试了两个循环:
let nlist = s
for f in full:
for s in short:
if s not in f:
nlist.append(f)
但我认为这是错误的方法
使用列表推导式:
lst = short_lst + [x for x in long_lst if x not in short_lst]
如果列表f
和s
不包含副本(如在您的示例中),也可以执行以下操作,
f = ["A", "B", "C", "D", "E"]
s = ["A", "B", "D"]
s.extend(set(f) ^ set(s))
print(s) # output: ['A', 'B', 'D', 'E', 'C']
,其中^
算子是对称差分算子。如果你想知道差分和对称差分的区别,我建议你看看这个问题。然而,帖木儿的答案可能是你正在寻找的方法。
对于巨大的full_listsize试试:
full_list = ['A','B','C','D','E']
short_list = ['A','B','D']
for i,s in enumerate(short_list):
if s in full_list:
full_list[full_list.index(s)] = full_list[i]
full_list[i]=s
print(full_list)
结果
[A,B,D,C,E]
注意
此方法比其他方法稍微快一些,因为您将full_list排序在原地.
但与其他答案相比,它的可读性较差。
连接的方法的惟一值frommultiple lists不同大小和:
x = ['I','G','F','A']
y = ['H','E','B','J','B']
z = ['D','C','A']
nlist = sorted(set(x+y+z))
nlist
#output
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']