基于一个元素在列表列表中查找列表

时间:2014-01-10 09:10:07

标签: python list search

我有一个列表,列出了Python中的连接图。此列表看起来像n * 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(以最pythonic和最有效的方式)这样做

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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]

使用lambda,您可以定义anonyme函数... 语法:

lambda arg0,arg1...: e

arg0,arg1 ...是你的fucntion的参数,e是表达式。 他们主要在map,reduce,filter等函数中使用lambda函数。

答案 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])