私は、指定された配列と値のすべてのインスタンスを削除し、新しい長さを返すために、ある配列と値のプログラムを作成しようとしています。Python配列のスライスが期待どおりに動作しない
例: 所与の入力アレイNUMSの= [3,2,2,3]、ヴァル= 3
それはNUMSの最初の2つの要素が2
された状態で、長さ= 2を返すべきここに私のコードは次のとおりです。
コード1:
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
i = 0
j = len(nums) - 1
while i <= j:
while i <= j and nums[j] != val:
j -= 1
while i <= j and nums[i] == val:
i += 1
if i <= j:
nums[i], nums[j] = nums[j], nums[i]
return len(nums[i:])
は、これが逆の順序で配列スライスを返します。私はカント
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
i = 0
j = len(nums) - 1
while i <= j:
while i <= j and nums[j] != val:
j -= 1
while i <= j and nums[i] == val:
i += 1
if i <= j:
nums[i], nums[j] = nums[j], nums[i]
nums[:] = nums[i:]
return len(nums)
:
nums[:] = nums[i:]
return len(nums[i:])
はコード2:私は、コード1の終了時に若干の修正を加えた場合
Input:
[3,2,2,3]
3
Output: [3,3]
Expected: [2,2]
はしかし、それは私に正しい出力を提供します私のコード1がうまくいかない理由を理解してください。スライスが期待どおりに機能しない理由を誰かに教えてもらえますか?
あなたが言及していない入力に対して何らかの制限がない限り、いずれのアプローチもうまくいくとは思わない。 –
奇妙なことは、私はあなたのcode1を実行し、予想どおりに働いたことです。すなわち、入力[3,2,2,3]が[2,2]と長さ2を返します。 – Nurjan