Python根据另一个列表重新排列列表



我想根据另一个列表重新排列一个列表,该列表之间有公共元素。

my list = ['q','s','b','f','l','c','x','a']
base_list = ['z','a','b','c']

上面的列表有共同的"a"、"b"one_answers"c"作为共同元素。的预期结果如下

my_result = ['a','b','c','q','s','f','l','x']

提前感谢Sky

my_list = ['q','s','b','f','l','c','x','a']
base_list = ['z','a','b','c']
res1=[x for x in base_list if x in my_list] # common elements
res2=[x for x in my_list if x not in res1] # 
res3=res1+res2

输出:

['a', 'b', 'c', 'q', 's', 'f', 'l', 'x']

如本文档所示,为sorted创建一个自定义密钥。将未出现在base_list中的字母的值设置为任意高,以便它们最终出现在后面。由于sorted被认为是稳定的,那些不在base_list中的将在原始顺序方面保持不变。

l = ['q','s','b','f','l','c','x','a']
base_list = ['z','a','b','c']
def custom_key(letter):
try:
return base_list.index(letter)
except ValueError:
return 1_000
sorted(l, key=custom_key)
['a', 'b', 'c', 'q', 's', 'f', 'l', 'x']

一种(可能不是最佳的(方式:

>>> sorted(my_list, key=lambda x: base_list.index(x) if x in base_list 
else len(base_list)+1)
['a', 'b', 'c', 'q', 's', 'f', 'l', 'x']

最新更新