繁体   English   中英

列表理解中的 Python 嵌套循环和 Else 子句

[英]Python Nested Loops And Else Clause in List Comprehension

我有两个清单:

lst = ['Go','Go','Go','Go','Dont Go!','Go','Go','Go','Dont Go!','Go'] 
tls = ['G', 'Go', 'Go1', 'Go2', 'Go3']

我需要检查 tls 中的每个元素是否存在于 lst 中,然后输出该元素,否则输出 NaN。

我需要输出如下列表:

['Go', 'Go', 'Go', 'Go', nan, 'Go', 'Go', 'Go', nan, 'Go']

我设法通过使用嵌套的 for 循环来实现这一点:

ml = []
for t in tls:
    for l in lst:
        if t in lst:
            if t !=l:
                ml.append(np.nan)
            else:
                ml.append(t)
        else:
            pass

是否可以在此列表理解中添加 else 子句以获得相同的结果?

[t for t in tls for l in lst if t ==l]

此列表理解的输出:

['Go', 'Go', 'Go', 'Go', 'Go', 'Go', 'Go', 'Go']

预期输出:

['Go', 'Go', 'Go', 'Go', nan, 'Go', 'Go', 'Go', nan, 'Go']

谢谢你。

这是使用列表推导方法的方法。 为了获得更好的性能,您可以采取一组tls减少以这种方式检查O(1)成员身份的复杂性:

lst = ['Go','Go','Go','Go','Dont Go!','Go','Go','Go','Dont Go!','Go'] 
tls = set(['G', 'Go', 'Go1', 'Go2', 'Go3'])

[i if i in tls else float('nan') for i in lst]
#['Go', 'Go', 'Go', 'Go', nan, 'Go', 'Go', 'Go', nan, 'Go']

如果我理解正确,那么您正在尝试检查lst每个元素,该元素是否与列表tls中的任何元素匹配。 然后尝试:

[t if t in tls else np.nan for t in lst]

输出

['Go', 'Go', 'Go', 'Go', nan, 'Go', 'Go', 'Go', nan, 'Go']

我不确定我是否正确地理解了您的任务,但是可以简单地实现所需的结果

[t if t in tls else np.nan for t in lst]

Python math模块还引入了Python 3.5中的 math.nan

浮点“非数字”(NaN)值。 等效于float('nan')的输出。

尝试这个,

>>> from math import nan
>>> 
>>> lst = ['Go','Go','Go','Go','Dont Go!','Go','Go','Go','Dont Go!','Go']
>>> tls = ['G', 'Go', 'Go1', 'Go2', 'Go3']
>>> [i if i in tls else nan for i in lst]
['Go', 'Go', 'Go', 'Go', nan, 'Go', 'Go', 'Go', nan, 'Go']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM