LINUX.ORG.RU

Простейшая задачка на списки

 


0

1

Есть 2 списка: a = [1,2,3,9,10] b = [2,3,4,5]

Нужно вывести те элементы из 1 массива, которые не входят во второй.

вот так работает:

def test(a,b):
    h = []
    for k in a:
        if not k in b:
            h.append(k)
    return h

print test(a,b)
но не красиво

попробовал уместить в одну строчку:

rr = map( lambda x: x if not x in b else None, a )
print rr

- появились лишние None.

Можно ли решение написать одной строчкой ?

★★☆☆

Последнее исправление: SI (всего исправлений: 1)
Ответ на: комментарий от panter_dsd

Если в a есть элементы встречающиеся 2 и более раза, то дублирование пропадёт. Так что код не эквивалентен функции test из поста автора.

Norgat ★★★★★
()

Замени map на filter. Лениво думать :-)

Virtuos86 ★★★★★
()
Ответ на: комментарий от Norgat

[x for x in a if x not in b]

Только я бы еще заменил на

[x for x in a if x not in set(b)]

если элементов в b не совсем мало. Делать set(a) надобности нету (по производительности лучше не станет).

kost-bebix ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.