2

私には2つの変換ケースがあります:

s = "foo bar" #-> "foo bar &"
s = "foo ! bar" # -> "foo & ! bar" -> notice not '&!'

私はこのようにしました:

t = s.split("!", 1)
t[0] = t[0] + "  &"
" !".join(t)

同じことをするためのよりPython的な方法は何ですか?

4

5 に答える 5

4

str.partition演算子解析の目的で構築されています:

p = s.partition(' !')
print p[0]+' &'+p[1]+p[2]

左から右に解析するときに、演算子の接頭辞と中置に適合します。常に3タプルを返すという事実により、オペレーターが見つからない場合でもそれを使用して、上記のように結果にアクションを適用することができます。

于 2012-05-20T00:37:07.730 に答える
4

これがより Pythonic であるかどうかはわかりませんが、上記の例はワンライナーで実行できます。

>>> s = "foo ! bar"
>>> s = s.replace(' ! ', ' & ! ') if '!' in s else s + ' &'
>>> s
'foo & ! bar'
于 2012-05-19T23:54:17.150 に答える
2
>>> import re
>>> re.sub(r'( !|$)', r' &\1', 'foo bar', 1)
'foo bar &'
>>> re.sub(r'( !|$)', r' &\1', 'foo ! bar', 1)
'foo & ! bar'
于 2012-05-20T00:16:34.740 に答える
1

1 行で複数の文を実行する:

>>> s = ["foo bar", "foo ! bar"]
>>> [x + ' &' if not '!' in x else x.replace('!','& !', 1) for x in s]
['foo bar &', 'foo & ! bar']
于 2012-05-19T23:57:05.343 に答える
1
s1 = "foo bar"
s2 = "foo ! bar"

import re

print re.sub(r'^([^!]+)( |$)', r'\1 &\2', s1) # foo bar &
print re.sub(r'^([^!]+)( |$)', r'\1 &\2', s2) # foo & ! bar
于 2012-05-20T00:15:20.467 に答える