如何将列表中的所有元素相除

4

例如:

a = [1,2,3,4,5,6]

我希望做的事情:

1/2/3/4/5/6

我尝试使用operator.div函数,���它似乎不能给出正确的结果。顺便说一句,我对Python还很新。

3个回答

7
你可以使用reduce函数。

将包含多个元素的序列从左到右依次传入二元函数进行累计运算,最终将序列规约为单一数值。

代码示例如下:

>>> from functools import reduce 
>>> l = [1,2,3,4,5,6]
>>> reduce(lambda x,y:x/y,l)
0.001388888888888889

等同于

>>> 1/2/3/4/5/6
0.001388888888888889

作为其他答案已经展示了truediv,这是Python2的另一种选择(另一种方式更受欢迎)。
>>> from __future__ import division
>>> l = [1,2,3,4,5,6]
>>> reduce(lambda x,y:x/y,l)
0.001388888888888889

嗯... 他们两个都得到了一半的“正确”答案 :) - Jon Clements
@bancan 不用谢,但请注意最好接受Kasra的答案,因为那是更好的方式。 - Bhargav Rao
@BhargavRao,你做得很好;-)。lambda方法对于各种类型的问题具有更高的灵活性。 - Mazdak
@kasra 是的,但在这种特定情况下,您的答案更好 :-) - Bhargav Rao
也许吧,但我们不要忘记“简单胜于完美”;-) - Mazdak
显示剩余2条评论

7
你可以使用 reduce()operator.truediv 来实现:
>>> a = [1,2,3,4,5,6]
>>> from operator import truediv
>>> 
>>> reduce(truediv, a)
0.001388888888888889

注意: 在Python3.x中,您需要从functools模块导入reduce()函数。


4
为什么不直接使用循环?
>>> a = [1,2,3,4,5,6]
>>> i = iter(a)
>>> result = next(i)
>>> for num in i:
...     result /= num
...
>>> result
0.001388888888888889
>>> 1/2/3/4/5/6
0.001388888888888889

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接