2014-01-10 2 views
0

У меня есть список списков, представляющих граф связности в Python. Этот список выглядеть как п * 2 матрицынайти список в списке списка на основе одного элемента

example = [[1, 2], [1, 5], [1, 8], [2, 1], [2, 9], [2,5] ] 

, что я хочу сделать, это найти значение первых элементов списков, где второй элемент равен определенной пользователем значения. Например:

  • вход 1 возвращается [2] (поскольку [2,1])
  • вход 5 возвращается [1,2] (поскольку [1,5] и [2,5])
  • вход 7 возвращает []

в Matlab, я мог бы использовать

output = example(example(:,1)==input, 2); 

, но я хотел бы сделать это в Python (в наиболее вещий и эффективным способом)

+1

Наиболее эффективным способом было бы использовать numpy. Это также очень похоже на Matlab-матрицы, поскольку он основан на очень похожем классе 'Numpy.Array'. –

+0

Вы должны принять один из ответов, если это было полезно для вас. – Oni1

ответ

2

Вы можете использовать список понимание в качестве фильтра, как это

>>> example = [[1, 2], [1, 5], [1, 8], [2, 1], [2, 9], [2,5]] 
>>> n = 5 
>>> [first for first, second in example if second == n] 
[1, 2] 
0
exemple = [[1, 2], [1, 5], [1, 8], [2, 1], [2, 9], [2,5] ] 
foundElements = [] 
** input = [...] *** List of Inputs 
for item in exemple: 
    if item[1] in input : 
     foundElements.append(item[0]) 
1

Вы можете работать с функциями Python карта и фильтр очень удобно:

>>> example = [[1, 2], [1, 5], [1, 8], [2, 1], [2, 9], [2,5] ] 
>>> n = 5 
>>> map(lambda x: x[0], filter(lambda x: n in x, example)) 
[1,2] 

С лямбда вы можете определить Anonyme функции ... Синтаксис:

lambda arg0,arg1...: e 

arg0, arg1 ... являются вашими параметрами fucntion, а e - выражением. Они используют функции лямбда в основном в таких функциях, как карта, уменьшение, фильтр и т. Д.

Смежные вопросы