python - 使用 python 的带有 if 语句的简单 lambda 函数

标签 python lambda

我有 1,000 个文件;每个文件的开头都是这样的:

!dataset_description = Analysis of POF D119 mutation. 
!dataset_type = Expression profiling by array
!dataset_pubmed_id = 17318176
!dataset_platform = GPL1322

目的:我想把这些信息转换成一个列表,这样我就可以在所有文件之间制作一个excel电子表格;即我希望列表看起来像这样:

[Analysis_of_POF_D119_mutation,Expression_profiling_by_array,17318176,GPL1322]

我有这段代码(这只是为了提取第一个变量“!dataset_description”,但是,我随后会在每个感兴趣的变量上运行代码,即 !dataset_type、!dataset_pubmed_id、!dataset_platform):

OpenDataset = open(sys.argv[1], 'r')
Dataset = OpenDataset.readlines()
ListOfInformation = []
    formatted_line = lambda x: "_".join(line.strip().split("=")[x].split())
    for line in Dataset:
        if line.startswith("!dataset_description"):
            description = formatted_line(1)
            print description

代码有效,但是,我现在处于了解 python 基础知识的阶段,我想开始更“pythonical”地编码。我有两个问题。

  1. 使用我正在使用的 lambda 表达式似乎很愚蠢。 lambda 表达式中的“x”将始终为 1,因为我总是想要“=”符号后面的内容。因此 x 并不是真正的“变量”,但是我不能没有没有变量的 lambda 表达式。

我试图将变量更改为行开头的内容,这是真正的变量,做这样的事情:

formatted_line = lambda x: "_".join(line.strip().split("=")[1].split()) if line.startswith(x)

但是,此代码返回语法错误。

有人知道如何使上述 lambda 表达式工作吗。

  1. 这些文件有可能非常大。但是,我需要的信息在文件的开头,并且都是以“!”开头的。象征。所以读入整个文件似乎很愚蠢,当我只需要文件开头的 X 行时,所有这些行都以“!”开头(每个文件的确切行数是可变的)。有没有办法只读以“!”开头的行?还是只使用 file.readlines() 会更快。

最佳答案

您当然可以使用没有参数的 lambda 表达式。

但是,在这种情况下,您实际上应该传递一个参数:行本身。这就是您正在操作的对象,因此应该将其传递到函数中。

您的 if 语句不起作用,因为 Python 中的内联 if 必须始终有一个 else 子句。在这种情况下,else 中的值是空字符串。

所以:

formatted_line = lambda line: "_".join(line.strip().split("=")[1].split()) if line.startswith(x) else ""

如果您只想读取值直到行停止以 ! 开头,您可以使用 itertools.takewhile:

from itertools import takewhile
...
for line in takewhile(lambda line: line.startswith("!"), Dataset):

关于python - 使用 python 的带有 if 语句的简单 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38435139/

相关文章:

python - Windows 中没有名为 'tkinter' (Python3.8) 的模块

python matplotlib ,特定子图之间的间距

python - 什么工具可以在 Linux 中运行,为 Python 程序创建安装程序,然后在 Windows 上安装它?

python - 反复从 Python 中读取 CSV?

java - 有效地加入嵌套列表中的文本

C++11:在源代码中将 lambda 转换为函数对象

Python 返回 MagicMock 对象而不是 return_value

c# - 如何向DataGridView添加数据

python - 构建一个可以根据其他 pd.DataFrame 功能导出新的哈希列的函数

lambda - 带有自定义比较器的 Map.entry 到 SortedMap 的 java-8 流