有效地将 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)
我正在优化我的脚本并发现这个问题:
这里我有一个 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)