Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么第二个嵌套for循环在迭代期间跳过重复的值?_Python_Loops - Fatal编程技术网

Python 为什么第二个嵌套for循环在迭代期间跳过重复的值?

Python 为什么第二个嵌套for循环在迭代期间跳过重复的值?,python,loops,Python,Loops,如果我以[3,3,4]的形式输入列表,为什么第二个for循环(j)在迭代过程中跳过j=1?运行后,我希望答案列表是[0,1] 如果我以[1,2,4]的形式输入列表,则一切正常 class Solution: def twoSum(self, nums: object, target: object) -> object: Answer_list = [] for i in nums: print("i_index:",

如果我以
[3,3,4]
的形式输入列表,为什么第二个for循环(j)在迭代过程中跳过
j=1
?运行后,我希望答案列表是
[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))

问题是
nums.index(j)
将返回第一次出现的索引。因此,对于
[3,3,4],它永远不会返回1。索引(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)

问题是
nums.index(j)
将返回第一次出现的索引。因此,对于
[3,3,4],它永远不会返回1。索引(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)

请不要发布无用的
解决方案
类。始终努力给出一个你的代码应该做什么?
对于nums中的j
使j获取nums中的所有值。如果nums是
[3,3,4]
,那么j永远不会是1……而且:
索引(3)
永远不会为
[3,3,4]
返回1,但在这两种情况下都为0。您不应依赖于
索引
。在
for
循环中使用
枚举
。请不要发布无用的
解决方案
类。始终努力给出一个你的代码应该做什么?
对于nums中的j
使j获取nums中的所有值。如果nums是
[3,3,4]
,那么j永远不会是1……而且:
索引(3)
永远不会为
[3,3,4]
返回1,但在这两种情况下都为0。您不应依赖于
索引
。在
for
循环中使用
枚举