【发布时间】:2021-12-02 06:58:23
【问题描述】:
我试图在 Python 中处理一个文件。长话短说,这是我写的代码的两个版本:
for line in file:
if line[0:2] == ".I":
#do something
elif line[0:2] == ".T":
#do something else
elif line[0:2] == ".A":
......
文件中有大约 21000 行。但是,当我将代码更改为以下内容时:
for line in file:
if line[0] == ".":
if line[1] == "I":
#do something
elif line[1] == "T":
#do something
elif line[1] == "A":
...
运行时间发生了巨大变化,我的意思是从 40 分钟到 30 秒。我知道列表切片是 O(N),但在这种情况下,我们只切片字符串中的前两个字符。那么是什么导致它发生了如此巨大的变化呢?
【问题讨论】:
-
你的大部分文件不是以
'.'开头的吗? -
如果文件不是以
"."开头,那么在第一种方法中,您进行 3 次比较(涉及 3 个切片),而在第二种方法中,您只进行一次不涉及切片的比较跨度> -
只是好奇:你用
line.startswith(...)测量时间了吗? -
第一个问题很好——有多少行以“.”开头?这就是区别。你有多少这些条件,要采取什么行动。您可能会发现具有实现“做某事”的功能的字典是最快的。
标签: python python-3.x string list indexing