我正在做一个简单的任务:在Python中找到两个数组的交集。
我写了代码:
def intersect(nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
hash_2 = {}
for x in nums2:
if x in hash_2:
hash_2[x] = 1
else:
hash_2[x] = hash_2[x] + 1
intersection = []
for x in nums1:
if x in hash_2:
if hash_2[x] >0:
intersection.append(x)
hash_2[x] = hash_2[x] - 1
return intersection
print(intersect([],[1]))
我明白了:
line 14, in intersect
hash_2[x] = hash_2[x] + 1
KeyError: 1
我尝试过调试,但没有帮助。为什么python程序在字典本身为空时发送1到else条件?
这是Python语言中的一些问题,你不应该在空字典中搜索吗?
答案 0 :(得分:2)
x
,1
中的值不在hash_2
中(因为hash_2
为空),因此else
分支被占用。由于x
不在hash_2
,因此您会KeyError
尝试访问hash_2[x]
。
您希望测试成为if x not in hash_2
。
答案 1 :(得分:0)
我没有得到hash_2
及其含义的观点,但如果你想计算两个序列的交集是一个解决方案:
def intersection(seq1, seq2):
result = list()
for item in seq1:
if item in seq2:
result.append(item)
return result
def main():
a = [10, 20, 30, 40, 'salam', 'bye', ['!', '*']]
b = [10, 11, 23, 30, 'salam', 'not', ['!', '*']]
print(intersection(a, b))
main()