所以我在Python工作,我想把一个字符串变成一个字符列表
VALID_SYMBOLS
是一个字符列表,EMPTY_SYMBOL
是一个短划线。
我想循环遍历symbols
中的每个元素,如果它有效,请保留它,如果它无效,请将其转换为EMPTY_SYMBOL
,但我在{{{ 1}}:
else
有更多的Pythonic方式吗?
答案 0 :(得分:1)
if
和else
排在第一位:
symbols = [x if x in VALID_SYMBOLS else EMPTY_SYMBOL for x in symbols ]
EMPTY_SYMBOL
必须在某处定义。
答案 1 :(得分:1)
你的list comprehension方向错误:
symbols = [x if x in VALID_SYMBOLS else EMPTY_SYMBOL for x in symbols]
(另请注意逻辑简化。)
if
之后的for foo in bar
用于过滤,并且实际上是else pass
- 这会跳过无效的x
,而不是替换他们与EMPTY_SYMBOL
:
>>> [x for x in [1, 2, 3] if x % 2]
[1, 3]
>>> [x if x % 2 else 0 for x in [1, 2, 3]]
[1, 0, 3]