【问题标题】:Why the second nested for loop skip duplicated values during iteration?为什么第二个嵌套 for 循环在迭代期间跳过重复值?
【发布时间】:2018-12-29 16:39:04
【问题描述】:

如果我将列表输入为[3,3,4],为什么第二个 for 循环 (j) 在迭代期间会跳过 j=1?我希望 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))

【问题讨论】:

  • 请不要发布无用的Solution类。始终努力提供minimal reproducible example
  • 你的代码应该做什么?
  • for j in nums 使 j 采用 nums 中的所有值。如果 nums 是 [3,3,4],j 永远不会是 1...
  • 另外:index(3) 永远不会为 [3, 3, 4] 返回 1,但在 both 情况下返回 0。你不应该依赖index 来达到你的目的。在 for 循环中使用 enumerate

标签: python loops


【解决方案1】:

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

要使其正常工作,请遍历 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))

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

        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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2018-03-23
    • 2013-08-04
    • 1970-01-01
    相关资源
    最近更新 更多