2017-05-30 28 views
0

問題文:整数の配列では、2つの数値のインデックスを返して、特定のターゲットに加算します。2つの和を解く:NoneType 'は反復可能ではありません

各入力には1つの解決策があり、同じ要素を2回使用することはできません。

私のソリューション(ブルートフォースのアプローチよりも優れてやろうとして):私はLine 9: TypeError: argument of type 'NoneType' is not iterableを得続ける

def twoSum(nums, target): 
    """ 
    :type nums: List[int] 
    :type target: int 
    :rtype: List[int] 
    """ 
    for i in range(0,len(nums)): 
     if (target - nums[i]) in nums.remove(nums[i]): #error 
      if i != nums.index(target - nums[i]): 
       return i, nums.index(target - nums[i]) 

私は.remove()がリストを返し、私はtarget - nums[i]がリストに含まれているかどうかを確認しようとしています。

答えて

1

remove()Noneを返します。代わりにこれを試してみてください:

def twoSum(nums, target): 
    """ 
    :type nums: List[int] 
    :type target: int 
    :rtype: List[int] 
    """ 
    for i in range(0,len(nums)): 
     nums.remove(nums[i]) 
     if (target - nums[i]) in nums: 
      if i != nums.index(target - nums[i]): 
       return i, nums.index(target - nums[i]) 

代わりに、あなたは、numsを維持するコピーを作成し、削除する必要がある場合:

def twoSum(nums, target): 
    """ 
    :type nums: List[int] 
    :type target: int 
    :rtype: List[int] 
    """ 
    for i in range(0,len(nums)): 
     nums_copy = list(nums) 
     nums_copy.remove(nums[i]) 
     if (target - nums[i]) in nums_copy: 
      if i != nums.index(target - nums[i]): 
       return i, nums.index(target - nums[i]) 
+0

なぜあなたは 'nums_copy = nums'を実行せず、明示的に' nums'をリストに変換しませんでしたか? –

+0

これはコピーではなく、元のnumのポインタです。リストをコピーするには、余分な手順が必要です。 [this](https://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list)の質問を参照してください。 – Darkstarone

+1

うわー。ありがとう。私はPythonについて何も知らないような気がする。 –

0

a.remove()リストを返しません。これは、エラーメッセージとしてNone

>>> a_list = [1, 2] 
>>> print(a_list.remove(1)) 
None 
>>> print(a_list) 
>>> [2] 

を使用すると、反復可能であるオブジェクトを必要とするオブジェクトを反復することをお勧め戻ります。

関連する問題