2013-06-14 1 views
-2

Поэтому у меня есть вложенный список, содержащий слова и цифры, как в следующем примере:Сортировка элементов из вложенных на основе второго элемента в каждом вложенном списке?

nested_list = [['This', 1],['is' , 2],['a', 3],['list', 4]] 

У меня также есть список номеров:

number_list = [2,3] 

Я хочу, чтобы генерировать два вложенных списков, основанных на погода второй элемент списка содержит число в списке чисел.

Я хочу выход быть:

list1 = [['is', 2],['a', 3]] #list one has values that matched the number_list 
list2 = [['This', 1],['list', 4]] #list two has values that didn't match the number_list 

я использую для цикла перебора списка, но я надеялся, что есть лучший путь.

+0

Пожалуйста, напишите, что вы пробовали ... –

+2

doesnt '['list', 3]' соответствует списку? –

+0

Да ... Думаю, я решил вопрос. Извините –

ответ

0

Вы можете использовать filter:

In [11]: filter(lambda x: x[1] in number_list, nested_list) 
Out[11]: [['is', 2], ['a', 3], ['list', 3]] 

In [12]: filter(lambda x: x[1] not in number_list, nested_list) 
Out[12]: [['This', 1]] 
+0

list comprehension more pythonic хотя! –

1

Использование двух списковых:

>>> nested_list = [['This', 1],['is' , 2],['a', 3],['list', 4]] 
>>> number_list = [2,3] 
>>> list1 = [item for item in nested_list if item[1] in number_list] 
>>> list2 = [item for item in nested_list if item[1] not in number_list] 
>>> list1 
[['is', 2], ['a', 3]] 
>>> list2 
[['This', 1], ['list', 4]] 

Используя Dict (только одной итерации требуется):

>>> dic = {'list1':[], 'list2':[]} 
for item in nested_list: 
    if item[1] in number_list: 
     dic['list1'].append(item) 
    else: 
     dic['list2'].append(item) 
...   
>>> dic['list1'] 
[['is', 2], ['a', 3]] 
>>> dic['list2'] 
[['This', 1], ['list', 4]] 

Если number_list огромен затем сначала преобразуйте его в set, чтобы улучшить эффективность су.