python - 如何在列表理解中使用多个条件子句?

标签 python list if-statement list-comprehension

我正在做一些字符串解析,如果字符是字母,则希望返回 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/

相关文章:

python - 将字典键保存为字符串

python - 设置 ReferenceProperty 值时出现 KindError

python - 如何在 csv 文件中写入和 append 数据并将其存储在列表中

Python for 循环计数器列表 - 计数器不工作

python - 如何提取嵌套列表?

if-statement - 列出 Haskell 中的理解和递归 if 语句

python - 通过与第二个列表比较从列表中删除项目,Python

python - 对其他缩进有点困惑

python - 如何退出程序 : sys. stderr.write() 或打印

python - matplotlib 图表轴上每个标签的不同颜色?