2

私はPythonの初心者です。str.partition()3 タプルを返す関数を考えてみましょう。このタプルの要素 0 と 2 のみに関心がある場合、そのようなタプルから特定の要素のみを選択する最良の方法は何ですか?

現在、次のいずれかを実行できます。

# Introduces "part1" variable, which is useless
(part0, part1, part2) = str.partition(' ')

または:

# Multiple calls and statements, again redundancy
part0 = str.partition(' ')[0]
part2 = str.partition(' ')[2]

私はこのようなことをしたいのですが、できません:

(part0, , part2) = str.partition(' ')
# Or:
(part0, part2)   = str.partition(' ')[0, 2]
4

5 に答える 5

13

アンダースコアは、必要のないものの名前としてよく使用されるため、次のようなものが機能します。

part0, _, part2 = str.partition(' ')

この特定のケースでは、これを行うことができますが、それはかなりの解決策ではありません:

part0, part2 = str.partition(' ')[::2]

より難解な解決策:

from operator import itemgetter
part0, part2 = itemgetter(0, 2)(str.partition(' '))
于 2009-10-01T07:52:38.343 に答える
4

正解です。一度にタプルのリストからいくつかのアドホック要素を取り出すことはできません。

part0, part1, part2 = str.partition(' ')

行く方法です。part1は気にしないで、いらないならいらない。未使用であることを示すために「ダミー」または「未使用」と呼ぶのが一般的です。

あなたは醜いことができます:

part0, part2 = str.partition(' ')[::2]

この特定のケースでは、それは難読化されており、他の人にとっては良くありません. ;)

于 2009-10-01T07:52:34.350 に答える
2

少し前に尋ねた質問があなたを助けることができると思います:

行列のいくつかの行を取得する Pythonic の方法

NumPy は、タプルまたはインデックスのリストを使用してさまざまな要素を抽出するスライス構文を提供しますが、いくつかの要素を抽出するためだけに文字列のリストを numpy.array に変換したくないと思うので、おそらくヘルパーを書くことができます:

def extract(lst, *indices):
    return [lst[i] for i in indices]

item0, item2 = extract(str.partition(' '), 0, 2)
于 2009-10-01T07:52:31.823 に答える
1

str.split(' ', 1)代わりに使用することもできますstr.partition(' ')

タプルの代わりにリストが返されますが、セパレータは返されません

于 2009-10-01T15:35:51.750 に答える
0

これは私がそれを行う方法です:

all_parts = str.partition(' ')
part0, part2 = all_parts[0], all_parts[2]
于 2009-10-01T19:49:32.387 に答える