【问题标题】:Why Does This Code Produce a List of Lists?为什么此代码会生成列表列表?
【发布时间】:2018-06-22 03:35:09
【问题描述】:

我有一个函数:

def csvToList( filename ):
    with open(filename, 'r') as fp:
        reader = csv.reader(fp)
        myList = list(reader)
    return myList

并调用它:

fruitList = csvToList('fruit.csv')

fruit.csv的内容是:

apple,orange,kiwi,tomato

fruitList 的值是一个列表列表:

[['apple', 'orange', 'kiwi', 'tomato']]

为什么这段代码会生成一个列表列表,而不仅仅是一个简单的“平面”列表,如下所示:

['apple', 'orange', 'kiwi', 'tomato']

【问题讨论】:

标签: python python-3.x csv import


【解决方案1】:

阅读器从 CSV 文件生成 。见documentation

从 csv 文件中读取的每一行都作为字符串列表返回。

您的文件只包含 1 行并不重要; list(reader) 生成所有行的列表,可以是 0、1 或 2000 万行。因此,只有 1 行的文件会为您提供一个列表,其中包含该单行作为列表。

如果您只期望一行,请使用 next() function 迭代一步:

def csvToList( filename ):
    with open(filename, 'r') as fp:
        reader = csv.reader(fp)
        return next(reader, [])

next(reader, []) 告诉函数如果 reader 根本没有产生任何东西,则返回一个空列表。

【讨论】:

  • 如果只期望一行,返回next()reader[0] 有什么区别?
  • @Idlehands: reader 不是一个序列,你不能我们索引。它是一个可迭代的
  • Derp,因为它是可迭代的,我假设它自动支持索引。感谢您清除它。应该更熟悉csv 模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 2021-12-04
  • 2015-03-14
  • 2012-09-21
相关资源
最近更新 更多