python:在数组中找到两个元素相乘为20

时间:2018-06-26 00:37:14

标签: python

我有一个元素数组,我想在其中找到两个元素,它们乘以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

3 个答案:

答案 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)}