Как использовать диапазон (len (список)), чтобы найти произведение всех четных целых чисел в списке? - PullRequest
0 голосов
/ 18 декабря 2018

Я очень новичок в кодировании, и я делаю задание, где я должен найти произведение всех четных целых чисел в огромном списке:

number_list = [12, 41, 10, 34, 37, 2, 3, 8, 42, 46, 46, 27, 13, 49, 41, 2, 28, 21, 37, 27, 31, 19, 46, 7, 50, 1, 46, 45, 19, 10, 14, 8, 44, 14, 10, 4, 23, 29, 46, 18, 32, 40, 32, 7, 33, 45, 26, 24, 43, 45]

Вопрос рекомендует использовать диапазон(len (список)), который дает мне диапазон (1,50), но я не понимаю, насколько это актуально.Мне удалось получить ответ без использования этого метода:

number_list = [12, 41, 10, 34, 37, 2, 3, 8, 42, 46, 46, 27, 13, 49, 41, 2, 28, 21, 37, 27, 31, 19, 46, 7, 50, 1, 46, 45, 19, 10, 14, 8, 44, 14, 10, 4, 23, 29, 46, 18, 32, 40, 32, 7, 33, 45, 26, 24, 43, 45]

result = 1
evenlist = number_list[::2]
for num in evenlist:
    result = result * num

Как бы диапазон (len (список)) был бы полезен здесь?

Ответы [ 5 ]

0 голосов
/ 18 декабря 2018

Я бы добавил, что ответ @ fixatd правильный, но также предупреждаю вас, что решение не Pythonic.Я понимаю, что ваша книга / инструктор хочет, чтобы ответ был определенным образом, но я хотел бы разработать и показать вам несколько лучших альтернатив, когда вы не привязаны к решению, которое они хотят видеть.

Например, здесьбыло бы более функциональным подходом к решению:

from operator import mul
from itertools import islice
from functools import reduce
number_list = [12, 41, 10, 34, 37, 2, 3, 8, 42, 46, 46, 27, 13, 49, 41, 2, 28, 21, 37, 27, 31, 19, 46, 7, 50, 1, 46, 45, 19, 10, 14, 8, 44, 14, 10, 4, 23, 29, 46, 18, 32, 40, 32, 7, 33, 45, 26, 24, 43, 45]
reduce(mul, islice(number_list, 0, None, 2))
218032559868925537961630414929920000

В качестве альтернативы, если вы предпочитаете меньше импорта или менее функциональны, вы можете зацикливаться как нативный.В Python вы часто просто зацикливаетесь на повторяемости.Идиома:

for something in iterable:  

Обычно менее питонно использовать len чего-то внутри диапазона, чтобы просто циклически перебирать что-то.Если вам по какой-то причине нужны индексы, используйте enumerate:

for index, item in enumerate(iterable):

Решение, которое вы предоставили, на самом деле довольно хорошее и питонное, в отличие от того, что запрашивает назначение.Вот ваше решение слегка убрано:

result = 1
for num in number_list[::2]:
    result *= num

>>>result
218032559868925537961630414929920000
0 голосов
/ 18 декабря 2018

Ну, кроме ответа @ fixatd, вы также можете сделать это с помощью уменьшить :

import operator
from functools import reduce

def prod(iterable):
    return reduce(operator.mul, iterable, 1)

result = prod(evenlist)
0 голосов
/ 18 декабря 2018

Что вы можете сделать, это выполнить итерацию по массиву, но вы можете указать «скачок» каждой итерации как две вместо одной, используя range(start,end,jump).Когда вы делаете list[::2], вы создаете новый массив и удаляете все остальные элементы, а затем выполняете итерацию над ним.Осторожнее, потому что для большего вклада может потребоваться больше ресурсов.

number_list = [12, 41, 10, 34, 37, 2, 3, 8, 42, 46, 46, 27, 13, 49, 41, 2, 28, 21, 37, 27, 31, 19, 46, 7, 50, 1, 46, 45, 19, 10, 14, 8, 44, 14, 10, 4, 23, 29, 46, 18, 32, 40, 32, 7, 33, 45, 26, 24, 43, 45]

prod = 1
for i in range(0, len(number_list), 2):
    prod *= list[i]
0 голосов
/ 18 декабря 2018

Почему вы заинтересованы в использовании диапазона?Ниже приведены два других варианта решения вашей проблемы.

Первый способ:

result = 1
for numbers in number_list:
    result *= numbers

Второй способ:

from functools import reduce
reduce(lambda a, b: a*b, number_list)
0 голосов
/ 18 декабря 2018

Может быть что-то вроде этого, где вы ссылаетесь на это, используя индекс массива;

number_list = [12, 41, 10, 34, 37, 2, 3, 8, 42, 46, 46, 27, 13, 49, 41, 2, 28, 21, 37, 27, 31, 19, 46, 7, 50, 1, 46, 45, 19, 10, 14, 8, 44, 14, 10, 4, 23, 29, 46, 18, 32, 40, 32, 7, 33, 45, 26, 24, 43, 45]

result = 1
for idx in range(0, len(number_list), 2):
   result = result * number_list[idx]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...