0

このスクリプトは私が必要としているものには機能しますが、これを作成する方法を調査しているときに、これは間違った方法であるという多くのコメントを見つけました。私が見つけたコメントはあまり説明的ではなく、私のユースケースには当てはまらないようです。これが間違っているかどうか、またはその理由を特定することはできません。これを改善するにはどうすればよいですか?

myList1 = [1, 2, 3, 4, 5]
myList2 = [1, 3, 5]
myList3 = []

for i in myList1:
    myList3.append(0)
for j in range(len(myList1)):
    for k in range(len(myList2)):
        if myList1[j] == myList2[k]:
            myList3[j] = 1

print(myList3)

私の出力は私が望むものです:

[1, 0, 1, 0, 1]

したがって、myList3 を myList1 と同じ長さにし、それにゼロを入力します。

次に、myList1 と myList2 を比較し、一致するものがあれば、myList1 のその要素番号が何らかの値を受け取ります。

たぶん、これには何も問題はなく、答えが見つからないのは、それで問題ないからですか?

4

3 に答える 3

1

あなたのコードはO(len(myList1) * len(myList2))時間内に動作し、リストが十分に大きい場合 (そして偶然の要素が に均等に分散している場合myList2)、問題を引き起こす可能性があります。簡単な最適化の 1 つmyList2は、事前にセットに変換することです。

mySet2 = frozenset(myList2)
myList3 = [1 if element in mySet2 else 0 for element in myList1]

O(len(myList1) + len(myList2))このコードは、平均実行時間が著しく向上します。

于 2018-11-19T21:52:22.953 に答える
0

つまり、技術的には、これにはまったく問題はありません。for i in myList1:実際には何にも使用しないため、 を使用しているのは少し奇妙ですi。@MisterMiyagi の答えが簡潔であるという点で気に入りましたが、初期化する簡単な方法を探しているだけならmyList3myList3 = [0]*len(myList1).

于 2018-11-19T21:49:58.340 に答える