pythonlearner
pythonlearner

Reputation: 1

Why the second nested for loop skip duplicated values during iteration?

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

Answers (1)

trincot
trincot

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

Related Questions