首页 > 解决方案 > 为什么第二个嵌套 for 循环在迭代期间跳过重复值?

问题描述

j=1如果我将列表输入为,为什么第二个 for 循环 (j) 在迭代期间会跳过[3,3,4]?我希望 answer_list[0,1]在运行之后。

如果我将列表输入为[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))

标签: pythonloops

解决方案


问题是它将返回第一次出现nums.index(j)的索引。所以它永远不会返回 1 。[3, 3, 4].index(3)

为了让它工作,迭代enumerate(nums),因为这也会给你索引:

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))

您还可以通过仅在列表中提前搜索内部循环来避免一些无用的迭代。可能是这样的:

        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)

推荐阅读