-1

私は2つの入力を持っています

list1 = [1,2,3,4,5,6]

dict1={'a':[1,11],'b':[2,234],'c':[34,6]}

結果を次のように表示する必要があります

list1 = [3,4,5] 

Algorithm : dict1 の値にない list1 の値を表示する

私はこれが以下のコードで達成できることを知っています、

tmp=0
for x in list1:
    for k,v in dict1.items():
        if x in v:
            tmp=1 
            break;
    if tmp:
        list1.remove(x)
        tmp=''

print list1

とにかく、フィルター関数または任意の単一行関数を使用してこれを試すことができますか?

4

3 に答える 3

0
list1 = [1,2,3,4,5,6]
dict1 = {'a':[1,11],'b':[2,234],'c':[34,6]}
set1 = set(list1)
set2 = set(t for _, v in dict1.items() for t in v)
print list(set1 - set2)

出力

[3, 4, 5]

編集:ブルーノの提案によると

list1 = [1,2,3,4,5,6]
dict1 = {'a':[1,11],'b':[2,234],'c':[34,6]}
from itertools import chain
set1 = set(list1)
set2 = set(v for v in chain.from_iterable(dict1.values()))
print list(set1 - set2)
于 2013-11-07T10:46:41.930 に答える