0

次のコードは、私が望むことを行います:

if myString.startswith(", "):
    myString = myString.lstrip(", ")
if myString.endswith(", "):
    myString = myString.rstrip(", ")
if re.search(", ,", myString):
   myString = re.sub(", ,", "", myString)

基本的には、先頭のコンマ、末尾のコンマ、および 2 つのコンマが間に何も入っていない場所をすべて削除したいと考えています。これでうまくいきますが、これを単純化してよりエレガントにし、コードの行数を減らす方法があると確信しています。

任意の提案をいただければ幸いです。前もって感謝します!

4

5 に答える 5

8

手始めに、rstrip と lstrip の両方を持つ .strip を使用します。次に、2 つのコンマを次のように置き換えます。

MyString = MyString.strip(", ").replace(", , ", "")
于 2013-08-27T07:37:26.987 に答える
2

split+の使用join:

>>> s = ', a, b, ,c, '
>>> ', '.join(x for x in map(str.strip, s.split(',')) if x)
'a, b, c'
于 2013-08-27T07:37:10.450 に答える
1

timeit と比較した回答のコード:

s = ", 1, 2, , 3, 4, , 5, 6, , 7, 8, , 9, 10, , 11, 12, , 13, 14, , 15, 16 ,"

def f1(s):
    s = s.strip(", ").replace(", , ", "")

def f2(s):
    s = ', '.join(x for x in map(str.strip, s.split(',')) if x)

def f3(s):
    s = re.sub('^, |, $|, ,', '', s)

if __name__ == '__main__':
    import timeit, re

    print(timeit.timeit("f1(s)", setup="from __main__ import f1, s"))
    print(timeit.timeit("f2(s)", setup="from __main__ import f2, s"))
    print(timeit.timeit("f3(s)", setup="from __main__ import f3, s"))

結果 (私のネットブック上):

1.44931602478
13.0764448643
11.3456158638
于 2013-08-27T08:42:10.147 に答える
1

re.sub を使用できます:

import re
myString = re.sub('^, |, $|, ,', '', myString)
于 2013-08-27T07:38:02.190 に答える
0

, , を , に置き換えたいと思うでしょう。

>>> " ,a,b,,c, ".strip(' ,').replace(',,', ',')
'a,b,c'
于 2013-08-27T07:38:40.727 に答える