異なる長さの一致する整数を含む2つのリストを比較したい。目標は、短いリストの欠損値に基づいて長いリストからアイテムを削除することによって、同じ長さにすることです。リスト:長さと不一致の値が異なる2つのリストを比較する
list1 = [101, 201, 301, 402, 502, 603, 701, 802, 904, 10012, 10021, 10033, 10041, 10054, 10062, 10071, 10082, 10093, 10101]
list2 = [102, 203, 504, 601, 703, 901, 10013, 10071, 10082, 10093, 10103]
ただし、一致する値は両方のリストで正確に同じではなく、この例では0と3の間で変化します。
結果は次のようになります。
resultlist1 = [101, 201, 502, 603, 701, 904, 10012, 10073, 10082, 10093, 10101]
resultlist2 = [102, 203, 504, 601, 703, 901, 10013, 10071, 10082, 10093, 10103]
removed_items_list1 = [2, 3, 7, 10, 11, 12, 13, 14] # Index numbers of
が、私は成功せず、次の試してみました
set(list1).intersection(list2)
だけ正確なすべての不要な値を削除しません
for i in xrange(len(list2)):
if abs(list1[i] - list2[i]) > 3:
del list1[i]
一致して返し
これらの2つのリストを不等長で比較し、長いリストで不一致(特定のバリエーション内)を削除するにはどうすればよいですか?
リニアがまだ一定の長さのために二次よりも長いを取ることができます。だから誰かが時間を持っているなら、異なるメソッドのパフォーマンスを比較するのは面白いでしょう:) – dnalow
非常に真実なので、 "入力が小さければ"免責事項です。しかし、最終的には、リストの理解度は、Pythonの同等のforループよりわずかに速いので、上記の解法の隠れ定数は、少なくとも解解解と同じです。私はテストはしていませんが、私の推測では、リストが数百にも及ぶと本当の違いが見え始めるでしょう。 – jme
私はあなたのソリューションが好きです。私は約1200のエントリのリストを使用します。しかし、私があなたの関数を使用すると、StopIterationエラーが発生します。 index、current = next(longer) – cf2