0

早些时候,我有很多出色的程序员帮助我完成一个功能。但是,讲师希望它在一个循环中,并且所有工作解决方案都使用多个循环。

我写了一个几乎可以解决问题的程序。您必须使用函数 has_key 来查看该特定键是否存在,而不是使用循环来比较所有值。答案将使您无需遍历字典以查找匹配值,因为您只需知道它们是否匹配。同样,charCount 只是一个函数,它将自身的常量输入字典并返回字典。

def sumPair(theList, n):
    for a, b in level5.charCount(theList).iteritems():    
        x = n - a     
        if level5.charCount(theList).get(a):
            if a == x:
                if b > 1: #this checks that the frequency of the number is greater then one so the program wouldn't try to multiply a single possibility by itself and use it (example is 6+6=12. there could be a single 6 but it will return 6+6
                    return a, x
            else:
                if level5.charCount(theList).get(a) != x:
                    return a, x           
print sumPair([6,3,8,3,2,8,3,2], 9)  

我只需要通过查看当前元素是否存在于元素列表中来使此代码无需迭代即可找到总和。

4

1 回答 1

4

您可以使用collections.Counter函数代替level5.charCount

而且我不知道你为什么需要检查if level5.charCount(theList).get(a):。我认为没有必要。a是您从level5.charCount(theList)

所以我简化了你的代码:

form collections import Counter

def sumPair(the_list, n):
    for a, b in Counter(the_list).iteritems():
        x = n - a
        if a == x and b >1:
            return a, x
        if a != x and b != x:
            return a, x

print sumPair([6, 3, 8, 3, 2, 8, 3, 2], 9)   #output>>> (8, 1)

也可以像这样使用列表理解

>>>result = [(a, n-a) for a, b in Counter(the_list).iteritems() if a==n-a and b>1 or (a != n-a and b != n-a)]
>>>print result
[(8, 1), (2, 7), (3, 6), (6, 3)]
>>>print result[0]   #this is the result you want
(8, 1)
于 2012-06-13T01:49:41.893 回答