我正在做一些字符串解析,如果字符是字母,则希望返回 1,如果字符是数字,则返回 2,如果字符是其他字符,则返回 pass。
通常我只会使用 for 循环并像这样附加到它
string = 'hello123...'
values = []
for char in string:
if char.isalpha():
values.append(1)
elif char.isdigit():
values.append(2)
返回
[1, 1, 1, 1, 1, 2, 2, 2]
正如预期的那样。根据https://stackoverflow.com/a/30245465/10029403使用列表推导式可以更快。所以我尝试了:
values = [1 if char.isalpha else 2 if char.isdigit for char in string]
但是,这给了我一个语法错误,因为需要“else”。
File "C:/Users/test3.py", line 12
values = [1 if char.isalpha else 2 if char.isdigit for char in string]
^
SyntaxError: invalid syntax
如果字符不是字母数字,我希望它不添加任何内容。我的代码有什么问题吗?
我可能必须执行此函数数十亿次,因此如果有更好的方法来执行此操作,欢迎提高效率。
最佳答案
如果您根本不想考虑特定元素,则应在推导式末尾包含该条件作为防护。
[1 if char.isalpha() else 2 for char in string if char.isdigit() or char.isalpha()]
末尾的 if char.isdigit() 或 char.isalpha()
会消除任何无法满足这些谓词的元素。
关于python - 如何在列表理解中使用多个条件子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51586643/