[英]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.