0

这是我的代码:

import math

def distance(argv):
    comp_diff = []
    for comp_1, comp_2 in argv.iteritems():
        comp_diff.append(comp_1-comp_2)
        print comp_2
    return math.sqrt(sum([math.pow(comp,2) for comp in comp_diff]))

if __name__ == '__main__':
    components = {0:4, 0:5, 0:4}
    d = distance(components)
    print d

输出是:

4
4.0

而它应该是:

4
5
4
5.1

为什么会这样?我更改了组件字典的长度,很明显只有最后一个键值对出现并被迭代。为什么是这样?请原谅我的 Python 新手。

4

2 回答 2

3

您没有正确使用字典:

>>> components = {0:4, 0:5, 0:4}
>>> components
{0: 4}

您可以改用元组列表。

import math

def distance(argv):
    comp_diff = []
    for comp_1, comp_2 in argv:
        comp_diff.append(comp_1-comp_2)
        print comp_2
    return math.sqrt(sum([math.pow(comp,2) for comp in comp_diff]))

if __name__ == '__main__':
    components = [(0,4), (0,5), (0,4)]
    d = distance(components)
    print d
于 2013-07-16T22:50:56.033 回答
2

dict 每个键只能有一个值。Python 正在丢弃其中的 2 个键值对。

(可能会帮助您避免未来麻烦的无关注释:字典键值对是无序的。不要试图依赖任何特定的迭代顺序。)

于 2013-07-16T22:50:42.113 回答