Пытаюсь последовательно разделить каждое число в списке на python, но как это сделать?

#python #division

Вопрос:

»’

 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

Комментарии:

1. Вы сказали, что хотите сделать 81/9, а затем коэффициент делится на 3. 81/9 равно 9, а 9/3 равно 3. Почему вы ожидаете, что в результате этой операции будет возвращен 1?

Ответ №1:

Если вы хотите последовательно делить целые числа, содержащиеся в итерируемом в Python, functools.reduce может сделать это очень эффективно:

 >>> from functools import reduce
>>> reduce(lambda x,y: x/y, [81,9,3])
3.0
>>> 
 

Функция reduce принимает функцию и повторяется в качестве аргументов. Он передает (в данном случае) 81 и 9 из итерируемых в качестве входных данных x,y в лямбда-функцию. Затем он принимает результат этой операции и следующее значение в итерации (в данном случае 3) и передает их на входы x,y для лямбда-функции. Результат тот же, что и при выполнении (81 / 9) / 3

Ответ №2:

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, 9, 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
 

Ответ №3:

Проверь свою математику. Правильный ответ-только 3. Кроме того, какой бы код вы ни опубликовали, он даже не пытается выполнить последовательное деление, вы просто возвращаете последний элемент своего списка, который в данном случае оказался 3.
Простым способом выполнения последовательного деления было бы:

 numlist = [ 81, 9, 3]

res = numlist[0]
for num in numlist[1:]:
    res = res/num

print(res)
 

Из:

 3.0