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

2024-07-05 15:48:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有1000个文件;每个文件的开头都是这样的:

!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]

我有这个代码(这只是为了提取第一个变量,“!然而,我随后会在每个感兴趣的变量上运行代码,即!数据集类型!数据集\u pubmed \u id!数据集(U平台):

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基础知识的阶段,我想开始更“pythonically”地编写代码。我有两个问题。你知道吗

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

我试着把变量改成行的开头,这是真正的变量,这样做:

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

但是,此代码返回语法错误。你知道吗

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

  1. 这些文件有很大的潜力。但是,我需要的信息是在文件的开头,并且都以“!”符号。所以读整个文件似乎很愚蠢,因为我只需要在文件的开头有X行,所有行都以“!”(每个文件的确切行数是可变的)。有没有办法读入以“!”开头的句子;还是仅仅使用文件.readlines(). 你知道吗

Tags: 文件of数据lambda代码表达式lineanalysis
2条回答

你当然可以有一个没有参数的lambda表达式。你知道吗

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

您的if语句不起作用,因为Python中的inline 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):

它引发SyntaxError,因为您缺少一个else分支。“expression if”或“inline if”的语法为:<value to return when True> if <condition> else <value when False>不能使用elif。你知道吗

所以代码可能是这样的:

formatted_line = lambda x: "_".join(line.strip().split("=")[1].split()) if line.startswith(x) else ""  # You can replace this with `None`.

相关问题 更多 >