多序列并行处理

2024-10-01 05:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法解决此问题:

多个序列的并行处理是数据分析的强大功能

定义一个函数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]

任何帮助都将不胜感激


Tags: 函数inforreturndefrange序列list
1条回答
网友
1楼 · 发布于 2024-10-01 05:03:07

需要注意的几件事:

  • 您应该在函数mySumParallel中返回/打印list(map(mySum, seqs))
  • 元素将是一个列表,列表的第一个元素将是你想要求和的序列

编辑:编辑下面的代码,以适应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]

相关问题 更多 >