1

時々私はこのようなコードを書きます:

a,temp,b = s.partition('-')

最初と3番目の要素を選択する必要があります。temp使用されることはありません。これを行うためのより良い方法はありますか?

言い換えれば、新しいリストを作成するために個別の要素を選択するためのより良い方法はありますか?

たとえば0,1,3,7、古いリストの要素を使用して新しいリストを作成したいとします。コードは次のようになります。

newlist = [oldlist[0],oldlist[1],oldlist[3],oldlist[7]]

かなり醜いですね。

4

5 に答える 5

8

使用に注意してください

a, _, b = s.partition('-')

国際化(gettext)に使用されることもある_ので、誤って上書きしたくないでしょう。

通常、私はpartition必要のない変数を作成するのではなく、これを行います

a, b = s.partition('-')[::2]

そしてこれは一般的な場合

from operator import itemgetter
ig0137 = itemgetter(0, 1, 3, 7)
newlist = ig0137(oldlist)

itemgetterは、ループで使用している場合、リスト内包表記よりも効率的です。

于 2012-08-29T03:38:55.343 に答える
6

最初に、この代替手段もあります。

a, b = s.partition('-')[::2]

後者の場合、明確な間隔がないため、あまりにもクリーンにする方法はありません。しかし、これはあなたのニーズに合うかもしれません:

newlist = [oldlist[k] for k in (0, 1, 3, 7)]
于 2012-08-29T03:33:20.800 に答える
4

Pythonの拡張スライス機能を使用して、リストに定期的にアクセスできます。

>>> a = range(10)
>>> # Pick every other element in a starting from a[1]
>>> b = a[1::2]
>>> print b
>>> [1, 3, 5, 7, 9]

負の索引付けは、期待どおりに機能します。

>>> c = a[-1::-2]
>>> print c
>>> [9, 7, 5, 3, 1]

あなたの場合、

>>> a, b = s.partition('-')[::2]
于 2012-08-29T03:34:47.640 に答える
2

1番目と3番目の値を選択するPythonの一般的な方法は次のとおりです。

a, _, b = s.partition('-')

そして、リスト内の指定された要素を選択するには、次のことができます。

newlist = [oldlist[k] for k in (0, 1, 3, 7)]
于 2012-08-29T03:35:39.667 に答える
1

中央のフィールドを保持する必要がない場合は、オプションのmaxsplitパラメーターを使用してsplit(および同様に)、分割をセパレーターの最初(または最後)の一致に制限できます。rsplit

a, b = s.split('-', 1)

これにより、使い捨ての一時的または追加のスライスを回避できます。

唯一の注意点は、とsplitは異なりpartition、セパレータが見つからない場合は元の文字列が返されることです。その結果、解凍の試みは失敗します。このpartitionメソッドは常に3タプルを返します。

于 2013-09-26T18:08:28.857 に答える