python - 如何在列表理解中使用 print() 和其他操作?

标签 python list-comprehension

<分区>

我有一个 CSV 数据文件目录,我在列表理解语句中使用 pandas.read_csv() 将所有这些文件加载​​到一行中。

import glob
import pandas as pd
file_list = glob.glob('../data/')
df_list = [pd.read_csv(f) for f in file_list]
df = pd.concat(df_list, ignore_index=True)

现在我想在每次加载数据文件时打印文件路径,但我找不到在列表理解中使用多个语句的方法。例如,类似 [pd.read_csv(f); print(f) for f in file_list] 将导致 SyntaxError

我能得到的最接近的事情是让 print() 在 if 语句中返回 None,它的工作方式类似于 pass打印后。

df_list = [pd.read_csv(f) for f in file_list if print(f) is None]

有没有正确的方法来做到这一点?我喜欢列表理解的简洁性,但它似乎不允许多个语句。

最佳答案

如果你想要一个列表理解(考虑到 for 循环的速度改进是可以理解的),你可以稍微修改你的解决方案,因为 None 是假的:

df_list = [pd.read_csv(f) for f in file_list if not print(f)]

或者创建一个函数来完成这项工作:

def read_and_print(f):
    print(f)
    return pd.read_csv(f)

df_list = [read_and_print(f) for f in file_list]

但是,这些方法违反了 Python 通常遵循的命令-查询分离原则,因为该函数具有副作用和感兴趣的返回值。尽管如此,我认为这些非常实用,特别是如果您现在想 print() 查看数据,但稍后您打算删除 print() 调用。

关于python - 如何在列表理解中使用 print() 和其他操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42854800/

相关文章:

python - 是否有可能在 python 中找到 [a,b] 范围内的随机 float ?

python - Azure-blob-存储。使用 SAS token 访问容器

python - 如何获得两个双元素子列表列表之间的对称差异?

python - 如何将 Python 的 itertools.product 库从列表理解转换为普通的 for 循环?

python - 如何编写具有依赖于比较和存储值的列表理解的单行代码?

python - 将自定义 View 添加到 Django 管理

python - 如何让 ibm_db 或 PyDB2 python 模块与 Mac OS X 10.7 Lion 中的 DB2 配合使用?

python - 在 Tkinter 主循环期间录制 OpenCV 视频

python - 在 Python 中并行化此列表理解

Python: [(x, y) for (x, y) in list_of_tuples if f(x) is not empty]