如何将嵌套的if和for循环放入python中的一行

时间:2019-04-05 17:45:02

标签: python list-comprehension

如何将以下内容放在if语句的一行中?

for g_id in gene_ids:
    # start one liner from here onward
   if g_id in actual_isoforms:
      pairs = [tup for tup in actual_isoforms[g_id]]
      for p in pairs:
          if p == (t_id, str(num)):
              iso_id = p[0]
              iso_num = p[1]
              total = check_exon_num[iso_id]

我已经尝试过了,但是它说“ tup”没有定义:

if (g_id in actual_isoforms) and [p == (t_id, str(num)) for p in tup for tup in actual_isoforms[g_id]]:

actual_isoforms也是一本包含元组列表的字典。因此,“对”是列表值,p是该列表中的每个元组。

2 个答案:

答案 0 :(得分:0)

假设您的NSData没有分配:

### STUFF

这是您尝试尝试列表理解时出错的地方:

if g_id in actual_isoforms:
    result = [### STUFF for tup in actual_isoforms[g_id] if tup == (t_id, str(num))]
扩展循环中的

for p in tup for tup in actual_isoforms[g_id] p指的是相同。据我所知,只有一个循环。

答案 1 :(得分:0)

pairs = [tup for tup in actual_isoforms[g_id] if tup == (t_id, str(num))]

因此,您可以对常规列表进行理解,并附加一些if condition_expression。因此,您得到[x for x in iterable if condition_expression],其中condition_expression决定元素是否应包含在结果列表中。