文字列を分割して、いくつかの単語をPythonのタプルに割り当てることができます。 例:Pythonの1つの文で文字列を分割して割り当てることはできますか?
a = "Jack and Jill went up the hill"
(user1 , user2) = a.split().pick(1,3) #picks 1 and 3 element in the list.
このような1つのライナーは可能ですか?もしそうなら、構文は何ですか?
文字列を分割して、いくつかの単語をPythonのタプルに割り当てることができます。 例:Pythonの1つの文で文字列を分割して割り当てることはできますか?
a = "Jack and Jill went up the hill"
(user1 , user2) = a.split().pick(1,3) #picks 1 and 3 element in the list.
このような1つのライナーは可能ですか?もしそうなら、構文は何ですか?
、あなたはoperator.itemgetter
を使用することができます。
戻りオペランドの
__getitem__()
メソッドを使用して、そのオペランドからアイテムを取得する呼び出し可能なオブジェクトを。複数の項目が指定されている場合は、ルックアップ値のタプルを返します。
例:
>>> from operator import itemgetter
>>> pick = itemgetter(0, 2)
>>> pick("Jack and Jill went up the hill".split())
('Jack', 'Jill')
または1ライナー(W/Oインポート)として:
>>> user1, user2 = itemgetter(0, 2)("Jack and Jill went up the hill".split())
ニース(私にも知らなかったことを教えてくれた)!それでも、インポートステートメントでは、1つのライナーではない...しかし、2つ! ;) – mac
私の心に来る最初は、次のとおりです。場合
>>> a = "Jack and Jill went up the hill"
>>> [e for n, e in enumerate(a.split()) if n in (0, 2)]
['Jack', 'Jill']
あなたは疑問に思う:enumerate
は、第1の要素と第2のなどの列挙反復可能の要素としてプログレッシブ数でタプルを生成します。
EDIT:としては@kindallのコメントで述べて、最後のステップは次のようになります。
>>> user1, user2 = [e for n, e in enumerate(a.split()) if n in (0, 2)]
>>> user1
'Jack'
>>> user2
'Jill'
んだけど、あれば申し訳ありません(それ以上の点に例を保つために割り当てを行うにはないことを選びましたこの混乱した誰か)。
あなたは_
は、我々は価値が気にしない、とsplit(" ", 3)
は4つのセグメントで文字列を分割することを意味し、この
a = "Jack and Jill went up the hill"
user1, _, user2, _ = a.split(" ", 3)
ような何かを行うことができます。
Ingenius ... 1024番目の要素だけをあなたのリスト! ;) – mac
私はむしろ二行でこれを行うが、ここでワンライナーだと思います:
user1, user2 = [token for (i, token) in enumerate(a.split()) if i in (0, 2)]
ここではニーズがあることを場合、私はちょうど読みやすさとバグの導入少ないチャンスのために(代わりにどうなるのかです将来変わる)。あなたは空想を取得したい場合は
tokens = a.split()
user1 = tokens[0]
user2 = tokens[2]
それは基本的に私の答えです...私のポストの2分後。 :( – mac
なぜぼろぼろですか?あなたはレースに勝った:) –
このトリックん
user1, user2 = a.split()[0::2][:2]
は2で2から数え配列の最初の2つの要素をピック。
分割後に 'a'変数を保持する必要があることを意味しますか? – BoltClock
ええと、誰もが1と3の代わりに0と2の要素の解を与えているようです。ちょっと面白い見解:) –
私は変数を保持するつもりはありません。 – sheki