Pythonでの文字列と整数の連結


136

Pythonではあなたが持っていると言います

s = "string"
i = 0
print s+i

あなたにエラーを与えるので、あなたは書く

print s+str(i) 

エラーが発生しないようにします。

これは、intとstringの連結を処理するための非常に不格好な方法だと思います。このような連結を行うために、JavaでさえStringへの明示的なキャストを必要としません。この種の連結を行う、つまりPythonで明示的なキャストを行わないより良い方法はありますか?


8
これは、Pythonが厳密に型指定された(en.wikipedia.org/wiki/Strong_typing)言語であるためです(詳細については、Googleで理解してください:))。
mouad '19

3
それはあいまいさをもたらすでしょう。の結果はどうなりますか"1" + 12また"11"その理由は何ですか?
バディ

1
バディ私はあなたが何を考えているのか分かりませんが、ただ仮定しないでください。私の問題は2つの異なるオブジェクトタイプを連結することでしたが、解決策を見つけました。Pythonでどれだけプログラムしたかわかりませんが、2つの文字列を連結して、その1つがNoneタイプの場合にエラーが発生することはありませんか?あなたは明示的なチェックを行うことができますが、それは単なる余分なコードです。この種のことは、エラーをログに記録する必要がある場合に必要です。
specialscope

2
ただs+str(i)、そしてあなたは正しいです!

回答:



87

文字列フォーマットなし:

>> print 'Foo',0
Foo 0

2
これは印刷でうまく機能しますが、文字列として変数に割り当てることはできません。Setオブジェクトを提供します。
スペシャルスコープ

2
また、v3 print() 関数を使用して一部のパラメーターを設定しない限り、2つの項目の間に余分な空白が挿入されます。
Levon、2007

34

新しいスタイルの.format()メソッドを使用した文字列フォーマット(デフォルトの.format()が提供する):

 '{}{}'.format(s, i)

またはより古いが、「まだ固執」している%-formatting:

 '%s%d' %(s, i)

上記の両方の例ではは、連結された2つの項目の間にスペースはあり。スペースが必要な場合は、フォーマット文字列に追加するだけです。

これらは、アイテムの連結方法、アイテム間のスペースなどについて、多くの制御と柔軟性を提供します。フォーマット仕様の詳細については、こちらを参照してください


14

Pythonは興味深い言語です。所与のタスクを実行するための「明白な」方法は通常1つ(または2つ)ありますが、柔軟性は依然として存在します。

s = "string"
i = 0

print (s + repr(i))

上記のコードスニペットはPython3構文で記述されていますが、印刷後の括弧は、バージョン3で必須になるまで常に許可されていました(オプション)。

お役に立てれば。

ケイトリン




0

Python 3.6以降では、次のようにフォーマットできます。

new_string = f'{s} {i}'
print(new_string)

あるいは単に:

print(f'{s} {i}')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.