Объект NoneType не повторяется? - PullRequest
0 голосов
/ 20 января 2020
def merge_list(list1,list2):

    res_list=[]
    list2=list2.reverse()
    conv = lambda i : i or '' 
    res = [conv(i) for i in list2] 
    for i in range(0,len(list1)):
        res_list.append(list1[i]+list2[i])
        merged_data=' '.join(res_list)
    return merged_data
list1 = ['A', 'app', 'a', 'd','ke','th','doc','awa']
list2=['y','tor','e','eps','ay',None,'le','n']
data=merge_list(list1,list2)
data

Я пытаюсь изменить list2 и объединить строки из обоих списков, чтобы получить строку в качестве результата. Цель состоит в том, чтобы игнорировать None в списке, если таковые имеются, и вывести последнее предложение.

Ответы [ 2 ]

3 голосов
/ 20 января 2020

Ошибка в том, что вы использовали

list2=list2.reverse()

, метод list.reverse() меняет список на месте, сам метод возвращает None. Чтобы исправить это, измените строку на следующее:

list2.reverse()

Кроме того, вы использовали

res_list.append(list1[i]+list2[i])

Это должно выглядеть следующим образом:

res_list.append(list1[i]+res[i])

Эти исправления дают выходные данные:

'An apple a day keeps the doctor away'

Другой способ решения этой проблемы заключается в использовании однострочных символов с использованием zip, среза списка для обращения list2 и троичных операторов для применения None -> '' logi c.

>>> list1 = ['A', 'app', 'a', 'd', 'ke', 'th', 'doc', 'awa']
>>> list2 = ['y', 'tor', 'e', 'eps', 'ay', None, 'le', 'n']
>>> ' '.join(''.join(y if y else '' for y in x) for x in zip(list1, list2[::-1]))
'An apple a day keeps the doctor away'
1 голос
/ 20 января 2020

1) Заменить None в обоих списках:

>>> list1 = [x if x else "" for x in list1]
>>> list2 = [x if x else "" for x in list2]

2) zip и повторять:

>>> lis=[]
>>> for x,y in zip(list1,list2[::-1]):
...     lis.append(x+y)

3) объединить:

>>> " ".join(lis)
'An apple a day keeps the doctor away'

Один вкладыш CDJB сочетает в себе все эти шаги

...