回答:
なぜmap
/ lambda
魔法?これはうまくいきませんか?
>>> foo = ['a', 'b', 'c']
>>> print(','.join(foo))
a,b,c
>>> print(','.join([]))
>>> print(','.join(['a']))
a
リストに数字がある場合は、リスト内包表記を使用できます。
>>> ','.join([str(x) for x in foo])
またはジェネレータ式:
>>> ','.join(str(x) for x in foo)
",".join(l)
すべてのケースで機能するとは限りません。StringIOでcsvモジュールを使用することをお勧めします
import StringIO
import csv
l = ['list','of','["""crazy"quotes"and\'',123,'other things']
line = StringIO.StringIO()
writer = csv.writer(line)
writer.writerow(l)
csvcontent = line.getvalue()
# 'list,of,"[""""""crazy""quotes""and\'",123,other things\r\n'
StringIO
Python 3にはありません
from io import StringIO
Python 3での使用
あなただけが欲しいのではありません:
",".join(l)
明らかに、値の中でコンマなどを引用/エスケープする必要がある場合は、さらに複雑になります。その場合は、標準ライブラリのcsvモジュールを確認することをお勧めします。
l=['a', 1, 'b', 2]
print str(l)[1:-1]
Output: "'a', 1, 'b', 2"
リスト内包表記を使用した@ jmanning2kには、新しい一時リストを作成するという欠点があります。より良い解決策は、イテレータを返すitertools.imapを使用することです。
from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
これはリストの例です
>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [i[0] for i in myList]))
>>> print "Output:", myList
Output: Apple,Orange
より正確な:-
>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [type(i) == list and i[0] for i in myList]))
>>> print "Output:", myList
Output: Apple,Orange
例2:-
myList = ['Apple','Orange']
myList = ','.join(map(str, myList))
print "Output:", myList
Output: Apple,Orange
ここでは、csv
ライブラリが唯一の賢明なオプションだと思います。これは、文字列内のコンマなど、csvのすべての使用例に対処するために作成されたためです。
リストl
を.csvファイルに出力するには:
import csv
with open('some.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(l) # this will output l as a single row.
を使用writer.writerows(iterable)
して複数の行をcsvに出力することもできます。
この例はPython 3と互換性があり、ここで使用されている他の回答StringIO
はPython 2です。
私の2セント。私はpythonのより単純な1行のコードが好きです:
>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join(imap(str, ifilter(lambda x: x, l)))
a,b,1
>>> m = ['a', '', None]
>>> ','.join(imap(str, ifilter(lambda x: x, m)))
'a'
それはpythonicで、文字列、数値、なし、空の文字列で機能します。それは短く、要件を満たしています。リストに数値が含まれない場合は、次の簡単なバリエーションを使用できます。
>>> ','.join(ifilter(lambda x: x, l))
また、このソリューションは新しいリストを作成しませんが、@ Peter Hoffmannが指摘したようなイテレータを使用します(ありがとう)。