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

时间:2017-10-15 23:32:22

标签: python csv zip iterable-unpacking

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

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

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次迭代。我在问是否有更清洁的方法呢? 谢谢

1 个答案:

答案 0 :(得分:1)

肯定有。将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)