有效地将 CSV 列解压缩到单独的列表中

Efficiently unpack CSV columns into separate lists

我正在优化我的脚本并发现这个问题:

这里我有一个 csv 文件,其中第一列只是索引,第二列包含一个字符串(任意长度的句子)。我想创建两个变量 "index" 和 "string" 分别包含所有索引和字符串。这是我的代码:

with open(file_name, 'r', encoding="utf8") as csvfile:
    train_set_x = csv.reader(csvfile, delimiter=',', quotechar='|')
    index = [[c[0],c[1]] for c in train_set_x]
    text = [a[1] for a in index]

这完成了工作,但是,它需要 2 次迭代。我在问是否有更清洁的方法来做到这一点? 谢谢

绝对有。将 zip 与可迭代解包一起使用。

index, text = zip(*((c[0], c[1]) for c in train_set_x))

MCVE:

In [152]: x, y = zip(*[(1, 2), (3, 4), (5, 6)])

In [153]: x
Out[153]: (1, 3, 5)

In [154]: y
Out[154]: (2, 4, 6)