Функция карты не работает для цикла - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь объединить два списка, если они содержат определенное слово.

Мой код работает нормально, пока я не попытаюсь передать его в функцию или цикл 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 для функции карты.

1 Ответ

1 голос
/ 15 февраля 2012

Если после итерации по blank3 вы никогда не столкнетесь с 'GOVERNMENTAL' и 'ACTIVITIES', a или b может быть 0, что приведет к сбою карты. Вы можете запустить a и b как пустые списки или проверить ввод перед 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...