У меня проблемы с решением этой проблемы:

Параллельная обработка нескольких последовательностей - мощная функциональность для анализа данных.

Определите функцию mySumParallel(seqs), которая применяет mySum(), определенное ранее, к произвольному набору последовательностей числовых значений параллельно. Эта функция возвращает список сумм всех последовательностей в переданной коллекции.

Например, вызов mySumParallel(collection), где collection = [[1, 12, 89, 5], range(100), range(2, 9, 3)] возвращает [107, 4950, 15].

Что касается mySum(), я уже сделал его таким:

def mySum(*elems):
    if not elems: return 0
    sumOfElems = 0
    for elem in elems:
        sumOfElems += elem
    return sumOfElems

Я попытался решить эту проблему, используя следующие коды:

collection = [[1, 12, 89, 5], range(100), range(2, 9, 3)]

def mySumParallel(*seqs):
    return list(map(mySum,seqs))

mySumParallel(collection)

Но он показывает такую ​​ошибку:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-108-2f21ae17a1db> in <module>
      7     return list(map(mySum,seqs))
      8 
----> 9 mySumParallel(collection)

<ipython-input-108-2f21ae17a1db> in mySumParallel(*seqs)
      5 
      6 def mySumParallel(*seqs):
----> 7     return list(map(mySum,seqs))
      8 
      9 mySumParallel(collection)

<ipython-input-105-573e7bfa9b5f> in mySum(*elems)
      4     sumOfElems = 0
      5     for elem in elems:
----> 6         sumOfElems += elem
      7     return sumOfElems
      8 

TypeError: unsupported operand type(s) for +=: 'int' and 'list'

А ожидаемый результат при вызове mySumParallel(collection), где collection = [[1, 12, 89, 5], range(100), range(2, 9, 3)] вернет [107, 4950, 15].

Любая помощь приветствуется.

0
rt3017 18 Апр 2020 в 12:35

1 ответ

Лучший ответ

Несколько замечаний:

  • вы должны вернуть / напечатать list(map(mySum, seqs)) в функции mySumParallel
  • elems будет списком, а первым элементом списка будет последовательность, по которой вы хотите суммировать

РЕДАКТИРОВАТЬ: редактирование приведенного ниже кода с учетом нового ограничения, добавленного OP, которое mySum не может быть изменено.

Рабочий код:

def mySum(*elems):
    if not elems: return 0
    sumOfElems = 0
    for elem in elems:
        sumOfElems += elem
    return sumOfElems

def mySumParallel(seqs):
    return [mySum(*x) for x in seqs]

collection = [[1, 12, 89, 5], range(100), range(2, 9, 3)]
print(mySumParallel(collection))

# prints [107, 4950, 15]
2
akazuko 19 Апр 2020 в 16:08