繁体   English   中英

python list comprehensions if语句时语法无效

[英]python list comprehensions invalid syntax while if statement

我有这样的列表z = ['aaaaaa','bbbbbbbbbb','cccccccc']我想从所有元素中删除前6个字符,如果元素为空则不放入另一个列表。 所以我做了这个代码:

[x[6:] if x[6:] is not '' else pass for x in z]

我试过了

pass continue

仍然是语法错误。 也许有人可以帮助我吗? 谢谢

每当您需要从列表中过滤项目时,条件必须在最后。 所以你需要过滤空的项目,就像这样

[x[6:] for x in z if x[6:] != ""]
# ['bbbb', 'cc']

因为,一个空字符串是假的,我们可以简洁地写下相同的条件如下

[x[6:] for x in z if x[6:]]

作为替代方案,正如tobias_k建议的那样,您可以像这样检查字符串的长度

[x[6:] for x in z if len(x) > 6]

如果你正在学习lambda (不是官方链接),你应该尝试使用map和filter这样:

filter(None, map(lambda y: y[6:], x))

这里,map(lambda y:y [6:],x)将只保留第7个字符的字符串,并用Boolean'False'替换其他较小的字符串。 要从新列表中删除所有这些'False'值,我们将使用过滤功能。

您只能将其用于学习目的,因为考虑到Python的PEP8时,这非常难看。 列表理解是如上所述的方式。

[y[6:] for y in x if y[6:]]

或者传统的for循环为

output = []
for y in x:
    if isinstance(y, str) and y[6:]:
        output.append(y[6:])

请注意,即使传统方式看起来更大,它也可以添加更多值(就像这里一样,如果列表中有其他数据类型,如列表,元组,字典等,则只从列表中获取字符串)

所以我建议要么坚持使用简单控制列表的列表推导,要么坚持控制输出的传统方式

暂无
暂无

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

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