2

我在 python 中有两个列表。

a=[1,4,5]
b=[4,1,5]

我需要的是根据a订购b。有没有任何方法可以简单地做到这一点而没有任何循环?

4

4 回答 4

2

最简单的方法是zip将两个列表的元素组合成tuples:

a, b = zip(*sorted(zip(a, b)))

sortedtuple首先通过它们的第一个元素(来自的元素a)比较 s;zip(*...)将“解压缩”排序列表。

于 2013-03-28T10:39:42.583 回答
2

或者可能只是检查一切是否完美然后..复制列表a for b

if all(x in b for x in a) and len(a)==len(b):
    b=a[:]
于 2013-03-28T10:41:25.167 回答
0

如果你想与list2相同list1,你不需要弄乱顺序或重新安排任何东西,只需替换list2list1

list2 = list(list1)

list()获取任何可迭代对象并从中生成一个新列表,因此我们可以使用它来复制list1,从而创建两个完全相同的列表。

也可以只做list2 = list1,但请注意,这将导致任何一个更改影响另一个(因为它们指向同一个对象),所以这可能不是你想要的。

如果list2在其他地方引用,因此需要保持相同的对象,则可以使用 . 替换列表中的每个值list2[:] = list1

一般来说,您可能需要第一个解决方案。

于 2013-03-28T11:42:16.433 回答
0

根据项目在 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]
于 2016-09-23T18:29:05.023 回答