问题描述
'''
numlist = [ 81,9,3]
#List methods
for num in numlist:
numlist[numlist.index(num)] = int(num)
#list comprehension
numlist = [int(num) for num in numlist]
i=0
for i in numlist:
a = i
b = i + 1
quotient = a / b
print(numlist[-1])
'''
我想要做的是得到 81 / 9 然后将商除以 3。整个操作给我 3,我的目的是得到 1 的结果。
任何建议都会很棒。
这个基本问题的目的是用除数除以除数,得到一个商数。然后将商除以下一个除数,商最终作为被除数。
我试过了:
numlist = input("Enter space-separated numbers (2 min) ").split()
#List methods
for num in numlist:
numlist[numlist.index(num)] = int(num)
#list comprehension
numlist = [int(num) for num in numlist]
from functools import reduce
reduce(lambda x,y:x/y,numlist)
print(numlist[-1])
但结果是 3
解决方法
如果你想在 Python 中对包含在可迭代对象中的整数进行顺序除法,functools.reduce 可以非常有效地做到这一点:
>>> from functools import reduce
>>> reduce(lambda x,y: x/y,[81,9,3])
3.0
>>>
reduce 函数接受一个函数和 iterable 作为参数。它从迭代中提供(在这种情况下)81 和 9 作为 x,y 输入到 lambda 函数。然后它获取该操作的结果,以及可迭代对象中的下一个值(在本例中为 3),并将 那些 提供给 lambda 函数的 x,y 输入。结果和做 (81 / 9) / 3 一样
,检查你的数学。正确答案只有3。此外,无论您发布什么代码,甚至都没有尝试执行顺序除法,您最终只会返回列表的最后一个元素,在这种情况下最终为 3。
完成顺序划分的一种简单方法是:
numlist = [ 81,3]
res = numlist[0]
for num in numlist[1:]:
res = res/num
print(res)
出:
3.0
,
numlist = [int(num) for num in numlist]
应该用 numlist = list(map(int,numlist))
替换,因为你永远不应该弄乱你正在迭代的迭代。
其次,您进行除法的最后一个 for 循环是错误的。不如试试这个。
nextNum = numlist[1]
for i in range(len(newList)-1):
nextNum = newList[i] / nextNum
一起。
numlist = [ 81,3]
newList = [int(num) for num in numlist]
nextNum = numlist[1]
for i in range(len(newList)-1):
nextNum = newList[i] / nextNum
print(nextNum)
出
1