を使用してSQLクエリからデータを取得しました
bounds = cursor.fetchone()
そして、次のようなタプルを取得します。
(34.2424, -64.2344, 76.3534, 45.2344)
そして、私は次のような文字列が欲しいです34.2424 -64.2344 76.3534 45.2344
それができる機能はありますか?
を使用してSQLクエリからデータを取得しました
bounds = cursor.fetchone()
そして、次のようなタプルを取得します。
(34.2424, -64.2344, 76.3534, 45.2344)
そして、私は次のような文字列が欲しいです34.2424 -64.2344 76.3534 45.2344
それができる機能はありますか?
使用str.join()
:
>>> mystring = ' '.join(map(str, (34.2424, -64.2344, 76.3534, 45.2344)))
>>> print mystring
34.2424 -64.2344 76.3534 45.2344
ここで map を使用する必要があります (タプル内のすべての項目を文字列に変換します) TypeError
。
map()
関数について少し説明します。
map(str, (34.2424, -64.2344, 76.3534, 45.2344)
と同等[str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]
です。
リスト内包表記を使用するよりも少し高速です。
$ python -m timeit "map(str, (34.2424, -64.2344, 76.3534, 45.2344))"
1000000 loops, best of 3: 1.93 usec per loop
$ python -m timeit "[str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]"
100000 loops, best of 3: 2.02 usec per loop
この回答へのコメントに示されているようにstr.join()
、リストの代わりにジェネレーターを使用できます。通常、これは高速ですが、この場合は遅くなります。
私がするなら:
' '.join(itertools.imap(str, (34.2424, -64.2344, 76.3534, 45.2344)))
を使用するよりも遅くなりますmap()
。違いはimap()
、ジェネレーターを返すことですmap()
が、リストを返します (python 3 ではジェネレーターを返します)。
私がするなら:
''.join(str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344))
hereで説明されている理由により、リスト内包表記を括弧で囲むよりも遅くなります。
あなたの(OPの)ケースでは、パフォーマンスはここでは大したことではないように見えるため、どちらのオプションも実際には重要ではありません。しかし、浮動小数点数/整数の大きなタプルを扱ったことがある場合は、最大の効率のために何を使用すればよいかがわかります:)。
マジックstr.format()
を使用したい場合は、任意のフォーマットを生成するために を使用することもできます。*
この質問の特定のケースを単一の区切り記号で処理するのは、実際には少し面倒です。
>>> bounds = (34.2424, -64.2344, 76.3534, 45.2344)
>>> "{} {} {} {}".format(*bounds)
34.2424 -64.2344 76.3534 45.2344
のような任意の長さを処理するより堅牢なバージョンjoin
は次のとおりです。
>>> len(bounds)*"{} ".format(*bounds)
しかし、追加された価値は、フォーマットをより複雑なものに拡張したい場合、次のオプションがあることです。
>>> "{} --> | {:>10} | {:>10} | {:>10} |".format(*bounds)
34.2424 --> | -64.2344 | 76.3534 | 45.2344 |
ここから、文字列の書式設定オプションは非常に多様になります。
これを試して
>>> a = (34.2424, -64.2344, 76.3534, 45.2344)
>>> ' '.join(str(i) for i in a)
'34.2424 -64.2344 76.3534 45.2344