我正在做一些字符串解析工作,如果字符是字母,则返回1,如果字符是数字,则返回2,如果字符是其他内容,则跳过。
通常我会使用for循环并像这样添加:
```python result = [] for char in string: if char.isalpha(): result.append(1) elif char.isdigit(): result.append(2) ```
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://dev59.com/cF0a5IYBdhLWcg3whI4b#30245465,使用列表推导式可以更快地执行。因此,我尝试了以下代码:
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
如果字符不是字母数字,我希望它不添加任何内容。我的代码有什么问题?
我可能需要执行此函数数十亿次,因此如果有更好的方法来完成此操作,任何提高效率的方法都受欢迎。
list
更快)。要做的实际工作越多,差异就越小。而且在Python中很少有需要这样做的代码——通常已经足够快了,当它不够快时,通常需要考虑更大的变化,比如在PyPy中运行或编写Cython扩展或使用NumPy之类的东西,然后再担心10%的问题。 - abarnertelse
。 - AChampionlist.append
的最坏情况是O(N)
,但是重复调用它是平摊的O(1)
。这是列表呈几何增长的微不足道的结果,就像几乎每种语言/库中的类似动态数组一样。 - abarnert