列表理解与两个" fors"和"如果"条件

时间:2017-07-25 00:40:06

标签: python list-comprehension

我有2个名单:

>>> phrases = ['emp_sal','emp_addr']
>>> cols = ['emp_sal_total','emp_sal_monthly','emp_addr_primary','emp_ssn','emp_phone']

我正在尝试使用列表理解并过滤掉 cols ,以便只选择 cols 中包含短语 emp_sal 的值或 emp_addr

所以,输出应该是:

['emp_sal_total','emp_sal_monthly','emp_addr_primary']

这只是复制场景的一个虚拟示例。实际示例包含180个奇数列的 cols 列表。

尝试以下解决方案:

new_cols = [c for c in cols if p for p in phrases in c]

失败了:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not list

以下方法产生一个空白列表:

  >>> [c for c in cols if p in c for p in phrases]
   []

1 个答案:

答案 0 :(得分:5)

您需要测试短语中的任何字符串是否在"&"中迭代的当前列中。为此,请使用const url = "http://domain/home#id_token=token123&state=staticState"; const params = new URL(url).hash.split("&").shift(); console.log(params);

cols

您的方法存在的问题是您在定义之前尝试使用any(),这会引发[c for c in cols if any(c.startswith(p) for p in phrases)]

p

如@Hamms的评论中所述,您仍然可以使用类似于您的方法的内容。您只需要在尝试使用它之前定义NameError

>>> [c for c in cols if p in c for p in phrases]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'p' is not defined