试图在 python 中按顺序划分列表中的每个数字,但是如何?

问题描述

'''

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