2016-07-23 5 views
0

こんにちは皆私の問題を助けることができるのだろうかと思います。Python複数の文字列からタプルへ

文字列をタプル内の5つの項目に変換する関数を定義しています。この関数は、いくつかの項目の長さが変化するいくつかの文字列を取る必要があります。文字列のインデックスを使用すると、すべての文字列で機能しないので、どのようにこれを行うのですか?一例として、

-

私は、次のような文字列を変換したい:

Doctor E212 40000 Peter David Jones 

文字列のタプル項目は次のようになります。しかし

Job(Doctor), Department(E212), Pay(40000), Other names (Peter David), Surname (Jones) 

文字列の一部他に2つの名前があります。他の人はちょうど1つしかありません。

他の名前が1と2の間で変わることができるとき、このような文字列をタプルに変換しますか?

あなたはおそらく言うことができるように、それは、Pythonに来るとき、私は初心者のビット午前;)

+2

どのように*あなたはそれについてどうやって動いて、どのように機能しないのですか? –

答えて

4

のPython 3で、あなただけのsplit()*"catch-all" tuple unpackingを使用することができます。また

>>> string = "Doctor E212 40000 Peter David Jones" 
>>> job, dep, sal, *other, names = string.split() 
>>> job, dep, sal, " ".join(other), names 
('Doctor', 'E212', '40000', 'Peter David', 'Jones') 

を、 regular expressionsを使用することができます。

>>> m = re.match(r"(\w+) (\w+) (\d+) ([\w\s]+) (\w+)", string) 
>>> job, dep, sal, other, names = m.groups() 
>>> job, dep, sal, other, names 
('Doctor', 'E212', '40000', 'Peter David', 'Jones') 
+0

こんにちは、おかげで、私は最初のメソッドを実装しようとしましたが、次のような関数で使用すると動作しませんでした:( 'x'は文字列です) 'def strTup(x): payR、dep、sal、 *その他、surn = x.split() payR、dep、sal、 "" .join(other)、surn' – RonB7

+0

コードのレイアウトは申し訳ありませんが、コメントは簡単ではありません。上記の例のようなタプルを返すように、これを動作させてください。 – RonB7

+0

タプルを '返す '必要があります。私のコードでは、私はちょうどそれを対話型シェルにエコーしました。あなたの関数では、 'return payR、dep、sal"、.join(other)、surn'を使います。 –

関連する問題