我有一个元素数组,我想在其中找到两个元素,它们乘以20。我需要使用哈希表来解决这个问题。 test_array的预期输出应为4和5,乘积为20。谢谢
test_array = [2,4,1,6,5,40]
counts = {}
for element in test_array:
if 20 % element == 0
counts[element] = 20/element
else:
None
print counts
答案 0 :(得分:1)
您应该将除法的结果作为字典的键,而不是列表的当前元素。
for element in test_array:
if 20 % element == 0:
counts[20/element] = element
for element in test_array:
if element in counts:
print("%d * %d" % (element, counts[element]))
break
else:
print "No pair found"
答案 1 :(得分:1)
如果需要所有元素和乘数
>>> dict((element, multiplier) for element in test_array for multiplier in test_array if element * multiplier == 20)
{4: 5, 5: 4}
您还可以进行其他一些小的修改,但是如果我正确理解,这似乎可以满足您问题的要求...
如果您只需要4和5,因为这两个元素都可以乘以20,则可以
[element for element in test_array for multiplier in test_array if element * multiplier == 20]
>>> [4, 5]
如果您的测试数组有所不同,并且您想要一个键值对,但是可能不希望重复,那么您可以做更多的工作来检查
for e in test_array:
for m in test_array:
if e * m == 20:
if e in counts.values() and m in counts.keys():
continue
counts[e] = m
print(counts)
>>> {4: 5}
我强烈建议您拆开理解并放入打印语句,如果您想查看发生了什么。谢谢
如果要使用取模和除法,可以删除多余的for循环:
for element in test_array:
if 20 % element == 0 and int(20/element) in test_array:
if int(20/element) in counts.values() and element in counts.keys():
continue
counts[int(20/element)] = element
print(counts)
如果您想很好地打印所有内容:
for k, v in counts.items(): print("%s * %s = 20" % (k, v))
答案 2 :(得分:0)
{tuple(sorted((x, 20//x))) for x in test_array \
if 20 % x == 0 and 20//x in test_array}
# {(4, 5)}