Reputation: 1
why the second for loop (j) skip j=1
during the iteration if I input the list as [3,3,4]
? I expect the answer_list is [0,1]
after running.
Everything is fine if I input the list as [1,2,4]
.
class Solution:
def twoSum(self, nums: object, target: object) -> object:
Answer_list = []
for i in nums:
print("i_index:", nums.index(i))
for j in nums:
print("j_index:" ,nums.index(j))
if target - i - j == 0:
print (i,j)
Answer_list.append(nums.index(i))
Answer_list.append(nums.index(j))
print("Answer List:", Answer_list)
return list(set(Answer_list))
s=Solution()
print(s.twoSum([3,3,4], 6))
Upvotes: 0
Views: 295
Reputation: 351328
The problem is that nums.index(j)
will return the index of the first occurrence. So it will not ever return 1 for [3, 3, 4].index(3)
.
To get it working, iterate over enumerate(nums)
, since that will also give you the index:
def twoSum(self, nums: object, target: object) -> object:
Answer_list = []
for i_index, i in enumerate(nums):
print("i_index:", i_index)
for j_index, j in enumerate(nums):
print("j_index:" , j_index)
if target - i - j == 0:
print (i,j)
Answer_list.append(i_index)
Answer_list.append(j_index)
print("Answer List:", Answer_list)
return list(set(Answer_list))
You could also avoid some useless iterations by only having the inner loop search ahead in the list. Possibly like this:
for j_index, j in enumerate(nums[i_index+1:]):
print("j_index:" , j_index+i_index+1)
if target - i - j == 0:
print (i,j)
Answer_list.append(i_index)
Answer_list.append(j_index+i_index+1)
print("Answer List:", Answer_list)
Upvotes: 2