2012-02-15 125 views
-1

我试图合并两个列表,如果它们包含某个单词。Map函数在For循环中不起作用

我的代码工作正常,直到我尝试将它转移到函数或for循环下。
只有这样,我得到:

TypeError: argument 2 to map() must support iteration 

我也试过更换map(None, a,b)itertools.imap(None, a,b)所建议的其他职位,但得到:

TypeError: 'int' object is not iterable 

有什么建议?

a = 0 
b = 0 
row_combine = [] 
for row in blank3: 

    if 'GOVERNMENTAL' in row: 
     a = row 
    if 'ACTIVITIES' in row: 
     b = row 
c = map(None, a,b) #problem is here 
for row in c: 
    row1 = [] 
    if row[0] == None: 
     row1.append(''.join([''] + [row[1]])) 
    else: 
     row1.append(''.join([row[0]] + [' '] + [row[1]])) 
    row_combine.append(''.join(row1)) 

输出a

a = [' ', u'GOVERNMENTAL', u'BUSINESS-TYPE'] 

输出b

b = [u'ASSETS', u'ACTIVITIES', u'ACTIVITIES', u'2009', u'2008', u'JEDO'] 

需要它是:

[ u'ASSETS', u'GOVERNMENTAL ACTIVITIES', u'BUSINESS-TYPE ACTIVITIES', u'2009', u'2008', u'JEDO'] 

因此用于循环后映射函数。

+0

说不上你试图在这里做什么,但不管它是什么,我相当肯定地图不是这样做的。 – 2012-02-15 15:56:29

回答

1

如果迭代通过blank3后,您永远不会遇到“政府”和“活动”,ab可能为0,这将导致映射失败。你可以开始ab断为空列表,或之前map()

同时检查,而不是为循环您输入:

row_combine = map(lambda x, y: ((x or '') + ' ' + (y or '')).strip(), a, b) 

其中产量:

[u'ASSETS', u'GOVERNMENTAL ACTIVITIES', u'BUSINESS-TYPE ACTIVITIES', u'2009', u'2008', u'JEDO'] 
+0

非常感谢您的帮助! – snown 2012-02-15 16:18:26