映射函数在for循环中不起作用

时间:2012-02-15 15:37:44

标签: python map

我正在尝试合并两个列表,如果它们包含某个单词。

我的代码工作正常,直到我尝试将其转移到函数下或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']

因此for map循环后的for循环。

1 个答案:

答案 0 :(得分:1)

如果在迭代blank3之后您从未遇到过'政府'和'活动',ab可能为0,这会导致地图失败。您可以将ab作为空列表启动,或在map()

之前检查您的输入

同时,而不是for循环:

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']