8

Python には、リスト内のアイテムをインデックスで削除する関数がなく、連鎖中に使用できないことに気付きました。

たとえば、次のようなものを探しています。

another_list = list_of_items.remove[item-index]

それ以外の

del list_of_items[item_index]

以来、;remove(item_in_list)を削除した後にリストを返します。item_in_listindex の同様の関数が省略されているのはなぜだろうか。含まれていることは非常に明白で些細なことのように思えますが、スキップする理由があると感じています。

そのような機能が利用できない理由について何か考えはありますか?

- - - 編集 - - - -

list_of_items.pop(item_at_index)削除する特定のアイテムがないとリストが返されないため、適切ではありません。したがって、チェーンには使用できません。(ドキュメントによると: L.pop([index]) -> item -- remove and return item at index )

4

3 に答える 3

3

使用list.pop:

>>> a = [1,2,3,4]
>>> a.pop(2)
3
>>> a
[1, 2, 4]

ドキュメントによると:

s.pop([i])

x = s[i]; と同じ。デル s[i]; ×を返す

アップデート

連鎖の場合、次のトリックを使用できます。(元のリストを含む一時的なシーケンスを使用):

>>> a = [1,2,3,4]
>>> [a.pop(2), a][1] # Remove the 3rd element of a and 'return' a
[1, 2, 4]
>>> a # Notice that a is changed
[1, 2, 4]
于 2013-08-04T14:32:01.447 に答える
1

リスト内包表記を使用してそれを行う素敵なPythonicの方法を次に示します(ゼロインデックスenumerateであることに注意してください):enumerate

>>> y = [3,4,5,6]
>>> [x for i, x in enumerate(y) if i != 1] # remove the second element
[3, 5, 6]

このアプローチの利点は、一度にいくつかのことを実行できることです。

>>> # remove the first and second elements
>>> [x for i, x in enumerate(y) if i != 0 and i != 1]
[5, 6]
>>> # remove the first element and all instances of 6
>>> [x for i, x in enumerate(y) if i != 0 and x != 6]
[4, 5]
于 2014-08-19T16:04:28.703 に答える