Pythonには2つのリストがあります。
a=[1,4,5]
b=[4,1,5]
私が必要とするのは、aに従ってbを注文することです。ループなしで簡単に行う方法はありますか?
Pythonには2つのリストがあります。
a=[1,4,5]
b=[4,1,5]
私が必要とするのは、aに従ってbを注文することです。ループなしで簡単に行う方法はありますか?
これを行う最も簡単な方法は、 を使用zip
して 2 つのリストの要素をtuple
s に結合することです。
a, b = zip(*sorted(zip(a, b)))
sorted
tuple
s を最初の要素 ( の要素a
) で最初に比較します。zip(*...)
ソートされたリストを「解凍」します。
または、すべてが完璧であることを確認してから、リスト a を b にコピーすることもできます
if all(x in b for x in a) and len(a)==len(b):
b=a[:]
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]
list2
と同一にしたい場合はlist1
、順序を台無しにしたり、何かを再配置したりする必要はありません。次list2
のコピーに置き換えるだけlist1
です。
list2 = list(list1)
list()
は任意の iterable を取り、そこから新しいリストを生成するため、これを使用して をコピーlist1
し、まったく同じ 2 つのリストを作成できます。
を実行することも可能かもしれませんがlist2 = list1
、これによりいずれかへの変更が他方に影響を与えることに注意してください (同じオブジェクトを指しているため)。したがって、これはおそらくあなたが望むものではありません。
list2
が他の場所で参照されているため、同じオブジェクトのままにしておく必要がある場合は、 を使用してリスト内のすべての値を置き換えることができlist2[:] = list1
ます。
一般に、おそらく最初のソリューションが必要です。