Для вашего кода:
def twoSum(nums, target):
hash={}
for i in nums:
if i in hash.keys():
continue
hash[i]=0
print(hash) # lineA
for i in range(len(nums)): # lineB
temp=target-nums[i]
if (hash[temp]==1): # lineC
return (nums.index(temp),i)
else: # lineD
hash[nums[i]]=1
print(hash)
Он выполняется следующим образом:
- При
lineA
значение hash
равно {3: 0, 2: 0}
- Тогдацикл начинается с
lineB
, первый цикл i is 0
, поэтому temp
равен 6-3
, то есть 3
, а hash[3]
равен 0
, не равен 1
, поэтому переходите к lineD
- Начинайте цикл снова с
lineB
, второй цикл i is 1
, поэтому temp
равен 6-2
, то есть 4
, затем в lineC
он выполняет if hash[4]==1)
, даетВы ошибаетесь:
if (hash [temp] == 1):
KeyError: 4
На самом деле я неЯ не совсем понимаю вашу логику, чтобы получить пару, посмотрите следующую функцию, которая может достичь ваших целей, просто для справки:
test.py:
def find_pair(nums, target):
print(list(set([(v, target-v) for i, v in enumerate(nums) if target-v in nums[i+1:]])))
# some tests which different inputs
find_pair([3, 2, 3], 6)
find_pair([3, 2, 1], 6)
find_pair([3, 2, 4, 1, 5], 6)
find_pair([3, 2, 4, 1, 5, 3], 6)
find_pair([-1, 7, 5, 3], 6)
Просто выполните еезатем выводятся все пары:
[(3, 3)]
[]
[(1, 5), (2,4)]
[(1, 5), (3, 3), (2, 4)]
[(- 1, 7)]