【发布时间】:2017-09-13 11:58:41
【问题描述】:
在以下列表数据中:
attri_values = ['gene_id "scaffold_200002.1"', 'gene_version "1"', 'transcript_id "scaffold_200002.1"', 'transcript_version "1"', 'exon_number "2"', 'gene_source "jgi"', 'gene_biotype "protein_coding"', 'transcript_source "jgi"', 'transcript_biotype "protein_coding"', 'exon_id "scaffold_200002.1.exon2"', 'exon_version "1"']
说我想应用一个条件表达式:
gene_id = [x for x in attri_values if 'gene_id' in x]
# But, when there is not list values with 'gene_id' I would like to return NA (string type) but not an empty list, but I am being unsuccessful
gene_name = [x if 'gene_name' in x else 'NA' for x in attri_values]
print(gene_name) #gives me
['NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA']
# I only want one 'NA' in string format.
我尝试在不同的点写 else 条件。我还尝试了 stackE 中的几个示例,但没有成功。
if else in a list comprehension
if/else in Python's list comprehension?
谢谢,
【问题讨论】:
-
您在尝试使用
else时遇到了什么错误? -
你不能把它转换成
set吗?类似gene_name = list(set([x if 'gene_name' in x else 'NA' for x in attri_values])) -
到目前为止,我的尝试没有出错,但我也没有得到我想要的确切内容。我也尝试了 lambda。我可以运行一个 for 循环来解决这个问题,但想学习一个非常好的和干净的方法来解决这个问题。我尝试了旧帖子中的几个示例,到目前为止没有成功。
-
@roganjosh:您的解决方案有效(因为它将相同的值合并为一个值),但我认为如果 NA 在未找到匹配项时仅报告一个值,则可能会出现另一个问题,并且为找到的匹配按原样报告。但是,仍然是一个很好的解决方案。
-
看起来第二组正在检查“gene_name”。提供的数据在其中的任何地方都不包含“gene_name”——程序正在做你所要求的——列表中的 foreach
x,给我x或"NA"。通过执行原始理解并检查列表是否为空,您的目标会更好地实现。
标签: python if-statement conditional list-comprehension