使用Counter-Python查找GCD

使用Counter-Python查找GCD,python,counter,Python,Counter,我试图使用计数器类计算两个数字的GCD。我已经实现了我的factorsations,并使用了一个交集来获得最小factorsations,但是我不确定如何从这里开始。更具体地说- gcd(120500)让我站在一个2:2,5:1的计数器上 如何使用这些数字来表示2^2 x 5^1 x = Counter(factors(a)) y = Counter(factors(b)) min = x & y return min 我的当前输入/输出: In[29]:gcd(120500)

我试图使用计数器类计算两个数字的GCD。我已经实现了我的factorsations,并使用了一个交集来获得最小factorsations,但是我不确定如何从这里开始。更具体地说-

gcd(120500)让我站在一个2:2,5:1的计数器上

如何使用这些数字来表示2^2 x 5^1

x = Counter(factors(a))  
y = Counter(factors(b))

min = x & y

return min
我的当前输入/输出:

In[29]:gcd(120500)

Out[29]:计数器({2:2,5:1})

我对Python相当陌生,因此任何关于如何进步的解释和建议都将不胜感激!谢谢:)

循环浏览“min”项。 启动正在运行的产品,prod=1 对于每个项目: 关键是乘数;价值就是力量 按“键”、“电源”次数多次“戳”

当你完成了“min”中的所有因素后,prod就是你的GCD。

循环查看“min”项。 启动正在运行的产品,prod=1 对于每个项目: 关键是乘数;价值就是力量 按“键”、“电源”次数多次“戳”

当您完成“min”中的所有因素后,prod是您的GCD。

您可以从计数器对象获得:

>>> counter = Counter({2: 2, 5: 1})
>>> import operator
>>> reduce(operator.mul, (factor ** count for factor, count in counter.items())
20
将函数应用于序列中的值和上一个结果,直到它使用了序列中的所有内容

因此,我们将乘法运算符应用于生成器生成的所有内容
(factor**count for factor,count in counter.items())
您可以从计数器对象获得:

>>> counter = Counter({2: 2, 5: 1})
>>> import operator
>>> reduce(operator.mul, (factor ** count for factor, count in counter.items())
20
将函数应用于序列中的值和上一个结果,直到它使用了序列中的所有内容


因此,我们将乘法运算符应用于生成器生成的所有内容
(factor**count for factor,count in counter.items())
解决问题并同时学习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

解决问题并同时学习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

最后,我找到了一个相当简单的答案-

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

谢谢大家的帮助,我觉得我现在确实更了解如何处理这两门课程。

最后我找到了一个相当简单的答案-

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


谢谢大家的帮助,我觉得我现在更了解如何处理counter和dict这两个类。

counter是一种字典。只需迭代字典并计算乘积。为什么要使用计数器?这是必需的-是的,这是教程的一部分,但我被卡住了,无法与我的导师联系:)我会更仔细地研究字典类型,谢谢你计数器是字典的一种。只需迭代字典并计算乘积。为什么要使用计数器?这是必需的-是的,这是教程的一部分,但我被卡住了,无法与我的导师联系:)我将更仔细地研究字典类型,谢谢你你不需要为了Sum而建立列表你不需要为了Sum而建立列表我已经通过一些尝试和错误获得了答案9,但是我相信答案应该是20(2^2=4,5^1=5,5*4=20)。这就是我挣扎的地方。我会坚持下去的@永远的洛娜,
5*4
从哪里来?也许我误解了,但我的课堂讲稿建议,要找到GCD,必须将2^2和5^1的结果相乘。@永远的洛娜,你找到的GCD是什么,我无法理解你的输出,120和500的gcd是20@Padraic Cunningham——这就是我想要达到的目标。当前输出纯粹是检查我是否在正确的轨道上,以得到20的最终答案。我的问题是如何从把这些数字放在柜台上,变成实际产生20作为答案@彼得·伍德-谢谢你!我自己刚刚遇到了这个选项,看起来它工作得很好。我已经通过一些尝试和错误得到了答案9,但是我相信答案应该是20(2^2=4,5^1=5,5*4=20)。这就是我挣扎的地方。我会坚持下去的@永远的洛娜,
5*4
从哪里来?也许我误解了,但我的课堂讲稿建议,要找到GCD,必须将2^2和5^1的结果相乘。@永远的洛娜,你找到的GCD是什么,我无法理解你的输出,120和500的gcd是20@Padraic Cunningham——这就是我想要达到的目标。当前输出纯粹是检查我是否在正确的轨道上,以得到20的最终答案。我的问题是如何从把这些数字放在柜台上,变成实际产生20作为答案@彼得·伍德-谢谢你!我自己刚刚遇到了这个选项,看起来它工作得很好。。。这正是我希望我的回答能引导你的地方。请“接受”其中一个答案——比如你自己的答案——这样这个问题就可以恰当地结束了。我现在还不能接受我自己的答案,但我会这么做:)。。。这正是我希望我的回答能引导你的地方。请“接受”其中一个答案——比如你自己的答案——这样这个问题就可以恰当地结束了。我现在还不能接受我自己的答案,但我会这么做:)