python:在数组中找到两个乘以20的元素

python:在数组中找到两个乘以20的元素,python,Python,我有一个元素数组,我想在里面找到两个乘以20的元素。我需要帮助解决这个使用哈希表。test_阵列的预期输出应为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 您应该使除法的结果成为

我有一个元素数组,我想在里面找到两个乘以20的元素。我需要帮助解决这个使用哈希表。test_阵列的预期输出应为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

您应该使除法的结果成为字典的键,而不是列表的当前元素

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"

如果你想要所有的元素和乘数

>>> 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))

. 这通常意味着你需要的是半个小时的时间和当地的导师在一起,或是走一走,而不是堆积如山。我看不到有人试图为这个练习实现哈希表。什么是
else:None
应该是什么意思?如果测试失败时您不需要执行任何操作,只需完全省略
else:
块即可;Python没有内置的数组类型,尽管
numpy
有一个。谢谢@barmar,在第二个“if”下面,重写为“print(element,counts[element]),您不能组合int
for k, v in counts.items(): print("%s * %s = 20" % (k, v))