2012-01-26 6 views
4

'' .join(list)はかなり素晴らしいです。しかし、私は非常に一般的に文字を最初と最後に追加する必要があることに気付いています。私はこれをいくつかのやり方で行ってきましたが、私が考えることができないより読みやすい方法があるように感じます。頭や尾にjoin()のイディオムがありますか?

それを扱うエレガントな方法はありますか?私はこれをちょっと考えていますか?例えば

["column1", "column2", "column3"] 

所望の出力:

| column1 | column2 | column3 | 

コード始めと終わりのない(簡潔な!)頭と尾で

print ' | '.join(mylist) 

print ' | ' + ' | '.join(mylist) + ' | ' 
print ' | ', ' | '.join(mylist), ' | ' 
print " | {} | ".format(' | '.join(mylist)) 
print ' | '.join([''] + mylist + ['']) (ugh) 
+0

私は機能としてパッケージ化する提案を 'format' – juliomalegria

答えて

3

あなたがすでに見つけたアプローチよりも良い方法はありません。

この場合、あなたはどのような不快感を感じますか?読みやすいですか?別の場所で同じ文字列を生成するときに自分自身を繰り返す必要がありますか?もしそうなら、両方の答えはこの行を関数としてパッケージ化し、呼び出し元にそれを使用させることです。

+1

1と1が好き - それは本当Pythonの方法です。 –

+0

関数呼び出しがうまくいっています。また、コードの小さなスニペットを投稿する前にテストする必要があることを思い出させるために... – ThreeHams

0

別のオプション:私はこれを行うには、単一の「すてきな」方法はないと思う

" | " + "".join(x + " | " for x in lst) 

。これがたくさん必要な場合は、必要な機能を実行する関数を記述します。

3

私は番目のオプションは、あなたが得ることができるクローゼットだと思う:

print " | {} | ".format(' | '.join(list)) 
0

あなたは1行たい場合:

print "| %s |" % (' | '.join(list)) 

しかし、おそらくそれをoverthinkingを。

0

リストの最初と最後に余分な空文字列を追加すると、「自分自身を繰り返す」ことなく参加することができます.1文字を変更することでセパレータを変更できます。

" | ".join([""] + lst + [""]) 

それともlstが大きい場合には、一時的なリストを避けるために:

from itertools import chain 
" | ".join(chain([""], lst, [""]) 
関連する問題