python - 在 python 中搜索嵌套列表

标签 python list search nested-lists

我有一个包含 97510 个值的元组嵌套列表,如下所示:

a = [ (1,2,3), (3,4,5), (5,4,2)]

每个第一个值 (index=0) 都是唯一的,我需要找到具有相同 index=1 项的其他 index=0 项 在示例中,我需要找到第二个和第三个元组,其中第二个项目“4”是常见的。

我该怎么做?

最佳答案

如果要查找所有匹配项:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for inner in a:
...     d[inner[1]].append(inner)
... 
>>> d
defaultdict(<type 'list'>, {2: [(1, 2, 3)], 4: [(3, 4, 5), (5, 4, 2)]})
>>> d[4]
[(3, 4, 5), (5, 4, 2)]

如果您想为特定的第二个值挑选出所有匹配项:

<罢工>

<罢工>
>>> filter(lambda inner: inner[1] == 4, a)
[(3, 4, 5), (5, 4, 2)]

<罢工>

编辑:正如评论中所指出的,列表理解是更可取的,因为它对于此类工作更有效:

>>> [inner for inner in a if inner[1] == 4]
[(3, 4, 5), (5, 4, 2)]

使用 timeit显示列表理解速度大约快 2.5 倍(无论如何在我的机器上):

>>> timeit.timeit('[inner for inner in a if inner[1] == 4]', 'a=[(1,2,3), (3,4,5), (5, 4, 2)]')
2.5041549205780029
>>> timeit.timeit('filter(lambda inner: inner[1] == 4, a)', 'a=[(1,2,3), (3,4,5), (5, 4, 2)]')
6.328679084777832

关于python - 在 python 中搜索嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6410062/

相关文章:

list - scala 中排序出现问题,出现 "Diverging implicit expansion ....."错误。根据元组列表的第一个元素按相反顺序对元组列表进行排序

ruby-on-rails - 如何使用 Searchkick 限制最大结果数

python - try block 之前的语句等待try完成才执行

python - 来自 numpy 数组的 RawArray?

list - 如何从 Tcl 中的列表中获取值(value)?

java - 在 Java 中搜索键值对的最快和最有效的方法?

algorithm - 为什么需要选择接近实际路径成本的启发式算法?

python - 如何具体更改 Sublime Python 注释颜色?

python - 将具有分层列索引的宽格式 pandas DataFrame 转换为整齐格式

php - 如何在php页面的选项列表中显示sql行