用单行代替字符串中的字符

时间:2017-07-11 14:08:13

标签: python python-3.x

我收到了一个字符串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方法时,这将用于其他情况。

3 个答案:

答案 0 :(得分:4)

这是你在找什么?

s = ''.join([c if c != '_' else '0' for c in s])

顺便说一下,另一个选择是:

s = '0'.join(s.split('_'))

我不完全理解为什么不s.replace('_', '0')

  

现就“为什么”而言:

     

这就是语言的语法。当if到来时   在预期forelse之前(如果出现错误则会引发错误)   没有一个)。当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'