この投稿では、リストが機能する方法と、appendがそれほど高価ではない理由を説明しようとしました。また、行を削除するために使用できる解決策を下部に投稿しました。
Pythonのリストの構造は、ノードネットワークのようなものです。
>>> class ListItem:
def __init__(self, value, next=None):
self.value = value
self.next = next
def __repr__(self):
return "Item: %s"%self.value
>>> ListItem("a", ListItem("b", ListItem("c")))
Item: a
>>> mylist = ListItem("a", ListItem("b", ListItem("c")))
>>> mylist.next.next
Item: c
したがって、appendは基本的にこれだけです:
ListItem(mynewvalue, oldlistitem)
Appendにはそれほどオーバーヘッドはありませんがinsert()
、一方で、リスト全体を再構築する必要があるため、はるかに時間がかかります。
>>> from timeit import timeit
>>> timeit('a=[]\nfor i in range(100): a.append(i)', number=1000)
0.03651859015577941
>>> timeit('a=[]\nfor i in range(100): a.insert(0, i)', number=1000)
0.047090002177625934
>>> timeit('a=[]\nfor i in range(100): a.append(i)', number=10000)
0.18015429656996673
>>> timeit('a=[]\nfor i in range(100): a.insert(0, i)', number=10000)
0.35550057300308424
ご覧のとおり、挿入ははるかに遅くなります。もし私があなたなら、すぐに書き戻すことで、あなたが必要としない行を削除するでしょう。
with open("large.txt", "r") as fin:
with open("large.txt", "w") as f:
for line in fin:
if myfancyconditionismet:
# write the line to the file again
f.write(line + "\n")
# otherwise it is gone
私の説明と解決策があります。
-Sunjay03