import pytest def twoSum(nums, target): lens = len(nums) j=-1 for i in range(lens): if (target - nums[i]) in nums: # 如果num2=num1,且nums中只出现了一次,说明找到是num1本身 if (nums.count(target - nums[i]) == 1) & (target - nums[i] == nums[i]): continue else: # index(x,i+1)是从num1后的序列找num2 j = nums.index(target - nums[i], i+1) break if j > 0: return [i, j] else: return [] # # def twoSum(nums, target): # hashmap={} #enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标 # for ind,num in enumerate(nums): # hashmap[num] = ind # for i,num in enumerate(nums): # j = hashmap.get(target - num) # if j is not None and i!=j: # return [i,j] def test_case_1(): res1 = twoSum([2, 3, 1, 5, 8], 6) expect1 = [2, 3] assert expect1 == res1 @pytest.mark.parametrize( "arr, target, expect", [ ([-2, 3, 1, 5, 8], -1, [0, 2]), ([2, 3, 1, 5, 8], 6, [2, 3]) ] ) def test_cases(arr, target, expect): assert twoSum(arr, target) == expect # # def test_case_2(): # res2 = twoSum([-2, 3, 1, 5, 8], -1) # expect2 = [0, 2] # assert expect2 == res2 # # res3 = twoSum([2, 1, 1, 5, 8], 2) # expect3 = [1, 2] # assert expect3 == res3 # # res4 = twoSum([2, -1, 1, 5, 8], 0) # expect4 = [1, 2] # assert expect4 == res4 # # res5 = twoSum([2, 0, 0, 1, -1], 0) # expect5 = [1, 2] # assert expect5 == res5 # # #