0

私は2つのリストを持っています。

1つのリストには、次のようなコードのみが含まれます。

b3b
3cd
6f6
4d8
96b
00a
774
eb3
607
7e5

他のリストには、たとえば名前のコードが含まれています

b3b:John
607:Eric
7e5:Jarrold

しかし、リストはまだ完全ではありません。

もう一方は削除できず、正しい順序である必要があるため、出力として必要なもの。

b3b:John
3cd
6f6
4d8
96b
00a
774
eb3
607:Eric
7e5:Jarrold

すでにこのコードを持っていますが、TrueまたはFalseしか返さないのですが、それは私が望んでいることではありません。

list1 = [line.strip() for line in open('list1')]
list2 = [line.strip() for line in open('list2')]

comp = [i[:3] for i in list2]

for i in list1:
    print(i, i in list2)

多分これで私を助けることができる誰か?

4

1 に答える 1

5

2番目のデータ構造として、リストではなく名前にキーをマッピングする辞書を使用する必要があります。

with open("list1") as f:
    keys = [line.strip() for line in f]
with open("list2") as f:
    names = dict(line.strip().split(":", 1) for line in f)

これで、ループを効率的に実装できます。

for k in keys:
    print(k, names.get(k, ""))

list2のすべてのエントリに対して線形検索を実行するlist1と、かなり非効率になります。パフォーマンスの向上は別として、辞書はデータの意味のより良いモデルでもあります。

于 2012-09-08T22:23:24.903 に答える