gpt4 book ai didi

python - 以 python 方式从文件读取时一次性构建 2 个列表

转载 作者:太空狗 更新时间:2023-10-29 17:56:41 25 4
gpt4 key购买 nike

我正在读取一个大文件,其中包含数十万个代表图形边缘的数字对。我想边做边建立 2 个列表:一个是前向边缘,一个是反向边缘。

目前我正在执行一个显式的for 循环,因为我需要对读取的行进行一些预处理。但是,我想知道是否有更多 pythonic 方法来构建这些列表,例如列表理解等。

但是,因为我有 2 个列表,所以我看不到一种方法可以在不读取文件两次的情况下使用理解来填充它们。

我现在的代码是:

with open('SCC.txt') as data:
for line in data:
line = line.rstrip()
if line:
edge_list.append((int(line.rstrip().split()[0]), int(line.rstrip().split()[1])))
reversed_edge_list.append((int(line.rstrip().split()[1]), int(line.rstrip().split()[0])))

最佳答案

我会保留您的逻辑,因为它是 Pythonic 方法,而不是多次split/rstrip 同一行:

with open('SCC.txt') as data:
for line in data:
spl = line.split()
if spl:
i, j = map(int, spl)
edge_list.append((i, j))
reversed_edge_list.append((j, i))

在您已经调用 rstrip 时调用它本身是多余的,所以当您拆分时,因为这已经删除了空格,所以只拆分一次意味着您可以节省很多不必要的工作。

您还可以使用 csv.reader 来读取数据并在您使用单个空格分隔后过滤空行:

from csv import reader

with open('SCC.txt') as data:
edge_list, reversed_edge_list = [], []
for i, j in filter(None, reader(data, delimiter=" ")):
i, j = int(i), int(j)
edge_list.append((i, j))
reversed_edge_list.append((j, i))

或者如果有多个空格分隔你可以使用map(str.split, data):

    for i, j in filter(None, map(str.split, data)):
i, j = int(i), int(j)

无论您选择什么,都比遍历数据两次或多次拆分相同的行更快。

关于python - 以 python 方式从文件读取时一次性构建 2 个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com