在 Python 中将列表传递给 pool.map() 函数会返回列表中每个项目的每个字符



这个在Windows上运行的Python 2.7脚本并没有像我期望的那样输出。

from multiprocessing import Pool
from multiprocessing.dummy import Pool as ThreadPool
def function1():
function1List = ["11" ,'22' , '33']
return function1List
def function2(passedList):
for item in passedList:
print item
list = function1()
#print list    used to verify list
if __name__ == '__main__':
pool = ThreadPool()
pool.map(function2, list)
pool.close() 
pool.join()

我的期望

11
22
33
44

我实际得到的是什么

1
1
2
2
3
3
4
4

我错过了什么?

map

将每个列表的一个项目传递给function2

然后,在function2中,您正在迭代该项目,获取字符串的每个字符。

这和你写的完全一样:

values = ["11" ,'22' , '33']
for value in values:
for item in value:
print item

那么,你如何解决它呢?好吧,这取决于你想要什么。

如果希望每个任务像当前一样获取单个列表项,则只需更改function2

即可:
def function2(item):
print item

如果希望每个任务都获取一个列表,则必须将调用map的内容更改为列表列表。我不确定你想要什么列表,但你可以传递四个单元素列表:

values = [[value] for value in values]

。或一个四元素列表:

values = [values]

。或两个双元素交错列表:

values = [values[::2], values[1::2]]

。或者您想要的任何其他内容。

最新更新