我正在尝试使用Counter类计算两个数字的GCD。我已经实现了我的factorisations并使用了一个交集来获得最小因子,但是我不确定我是如何从这里进步的。更具体一点 -
gcd(120,500)让我在一个包含2:2,5:1的计数器
如何以表示2 ^ 2 x 5 ^ 1的方式使用这些数字?
x = Counter(factors(a))
y = Counter(factors(b))
min = x & y
return min
我当前的输入/输出:
在[29]中:gcd(120,500)
Out [29]:Counter({2:2,5:1})
我对Python很新,所以对于如何进步的任何解释和建议都将不胜感激!谢谢:))
答案 0 :(得分:0)
循环播放" min"的项目。 启动正在运行的产品,prod = 1 对于每个项目: 关键是乘数;价值就是力量 多个" prod"通过" key"," power"次。
当你经历了" min"中的所有因素时,prod就是你的GCD。
答案 1 :(得分:0)
您可以从Counter对象获取items
:
>>> counter = Counter({2: 2, 5: 1})
>>> import operator
>>> reduce(operator.mul, (factor ** count for factor, count in counter.items())
20
reduce
继续将函数应用于序列中的值和前一个结果,直到它使用了序列中的所有内容。
因此我们将乘法运算符mul
应用于生成器生成的所有内容(factor ** count for factor, count in counter.items())
答案 2 :(得分:0)
解决问题和学习Python的最佳方法是以交互方式探索课程。在您的情况下,您可以尝试以下
>>> import collections
>>> counter = collections.Counter()
>>> counter[2] = 2
>>> counter[5] = 1
>>> print counter
Counter({2: 2, 5: 1})
>>> dir(counter)
['__add__', '__and__', '__class__', '__cmp__', '__contains__', '__delattr__',
'__delitem__', '__dict__', '__doc__', q__', '__format__', '__ge__', '__getattribute__',
'__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__len__', '__lt__',
'__missing__', '__module__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__',
'___', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__sub__', '__subclasshook__',
'__weakref__', 'clear', ', 'elements', 'fromkeys', 'get', 'has_key', 'items', 'iteritems',
'iterkeys', 'itervalues', 'keys', 'most_common', ', 'popitem', 'setdefault', 'subtract',
'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
在此阶段,您应该探索每种方法的作用
>>> counter.keys()
[2, 5]
>>> counter.values()
[2, 1]
>>> counter.items()
[(2, 2), (5, 1)]
让我们确认items()
是正确的方法
>>> help(counter.items)
Help on built-in function items:
items(...)
D.items() -> list of D's (key, value) pairs, as 2-tuples
然后解决方案很简单 - 我们想要添加每对的指数
>>> [ factor ** count for factor, count in counter.items()]
[4, 5]
>>> sum([ factor ** count for factor, count in counter.items()])
9
答案 3 :(得分:0)
我最终找到了一个相当简单的答案 -
x = Counter(factors(a))
y = Counter(factors(b))
min = x & y
gcd = 1
for key, value in min.items():
gcd = gcd * key ** value
return gcd
谢谢大家的帮助,我觉得我当然明白如何处理这两个dict课程现在好多了。