我想根据另一个列表重新排列一个列表,该列表之间有公共元素。
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']