我收到了一个字符串s = "1_2_3_4"
,我希望将所有"_"
替换为另一个字符"0"
。
我使用s = ''.join([c for c in s if c != '_'])
从字符串中删除"_"
,但我不知道如何替换值。我想做s = ''.join([c for c in s if c != '_' else '0'])
之类的事情,但当然,这是无效的语法。
我很清楚s.replace('_','0')
会是一个更好的选择,但我只是想了解如何在列表理解中使用if语句。当我使用的课程没有replace
方法时,这将用于其他情况。
答案 0 :(得分:4)
这是你在找什么?
s = ''.join([c if c != '_' else '0' for c in s])
顺便说一下,另一个选择是:
s = '0'.join(s.split('_'))
我不完全理解为什么不s.replace('_', '0')
。
现就“为什么”而言:
这就是语言的语法。当
if
到来时 在预期for
和else
之前(如果出现错误则会引发错误) 没有一个)。当if
位于for
之后,else
跟随是不允许的。
答案 1 :(得分:3)
使用内联if
else
语句尝试此生成器表达式;
s = "1_2_3_4"
s = ''.join(((char if char != '_' else '0') for char in s))
print(s)
这不是列表理解,在这个用例中更好。仍然是一个班轮,但在更大的琴弦上效率更高。
答案 2 :(得分:2)
你可以这样做(最好使用替换,但你希望在列表中使用联接):
s = "1_2_3_4"
s = ''.join([c if c != '_' else '0' for c in s])
print (s)
>>> '1020304'