我在 python 中有两个列表。
a=[1,4,5]
b=[4,1,5]
我需要的是根据a订购b。有没有任何方法可以简单地做到这一点而没有任何循环?
最简单的方法是zip
将两个列表的元素组合成tuple
s:
a, b = zip(*sorted(zip(a, b)))
sorted
将tuple
首先通过它们的第一个元素(来自的元素a
)比较 s;zip(*...)
将“解压缩”排序列表。
或者可能只是检查一切是否完美然后..复制列表a for b
if all(x in b for x in a) and len(a)==len(b):
b=a[:]
如果你想与list2
相同list1
,你不需要弄乱顺序或重新安排任何东西,只需替换list2
为list1
:
list2 = list(list1)
list()
获取任何可迭代对象并从中生成一个新列表,因此我们可以使用它来复制list1
,从而创建两个完全相同的列表。
也可以只做list2 = list1
,但请注意,这将导致任何一个更改影响另一个(因为它们指向同一个对象),所以这可能不是你想要的。
如果list2
在其他地方引用,因此需要保持相同的对象,则可以使用 . 替换列表中的每个值list2[:] = list1
。
一般来说,您可能需要第一个解决方案。
根据项目在 a 中的索引对 b 进行排序,最后所有项目都不在 a 中。
>>> a=[1,4,5,2]
>>> b=[4,3,1,5]
>>> sorted(b, key=lambda x:a.index(x) if x in a else len(a))
[1, 4, 5, 3]