Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中搜索二维元组/列表_Python - Fatal编程技术网

在Python中搜索二维元组/列表

在Python中搜索二维元组/列表,python,Python,我想在元组的元组中搜索特定字符串,并返回父元组的索引。我似乎经常遇到这种搜索的变体 做这件事最像蟒蛇的方式是什么 即: 我可以将其概括为一个小的实用函数,它包含一个iterable、一个索引(我在示例中硬编码了0)和一个搜索值。它确实起了作用,但我有一个想法,那就是它可能只有一行;) 即: Lambdas很有趣 return reduce( lambda x,(i,(a,b)): i, filter( lambda (i,(a,b)): a == "Spock",

我想在元组的
元组中搜索特定字符串,并返回父元组的索引。我似乎经常遇到这种搜索的变体

做这件事最像蟒蛇的方式是什么

即:

我可以将其概括为一个小的实用函数,它包含一个iterable、一个索引(我在示例中硬编码了
0
)和一个搜索值。它确实起了作用,但我有一个想法,那就是它可能只有一行;)

即:

Lambdas很有趣

return reduce(
    lambda x,(i,(a,b)): i,
    filter(
        lambda (i,(a,b)): a == "Spock",
        enumerate(depr)
    ),
    None
)
它确实起了作用,但我有一个想法,那就是它可能只有一行;)

一行可能不是python的方式:)

你用的方法看起来不错

编辑:

如果你想变得可爱:

return next( (i for i,(k,v) in enumerate(items) if k=='Spock'),None)

next
获取生成器表达式,并在生成器耗尽后返回下一个值或第二个参数(在本例中为
None

如果经常搜索同一个元组,可以构建dict

lookup_table = dict((key, i) for i, (key, unused) in enumerate(derp))

print lookup_table['Spock']
--> 2

另一种方法是:

[d[0] for d in derp].index("Spock")
我不确定迭代器是否在调用索引之前计算所有值,因此效率低下。

或者您可以:

dict(derp)[<key_name>]

这将给你“宠物”

过滤器()的问题是:(1)它将始终搜索整个列表,(2)它将返回匹配列表,而不是任何匹配的索引。(1)true(2)可以使用map或reduce(参见编辑的帖子)解决。顺便说一句,发布的原始代码很好,没有这个“缺陷”。热爱兰博达斯是一种个人特质;)也许我遗漏了什么:Koobz定义的Pull函数有什么问题?IMHO更具可读性、更通用性和更好的性能:
100000个循环,对于Koobz定义的函数最好为3:1.37 usec每个循环
,对于yours定义的函数最好为
100000个循环,最好为3:5.82 usec每个循环
为什么要索引而不是值?只是一个特定的上下文。我使用的另一个函数是一个元组和索引,然后说“索引I处的元组是当前活动的元组”。这似乎比公认的答案优雅得多——有缺点吗?@AaronPollock,标记的答案发布于2010年2月,而这一答案发布于2012年11月,也许这就是原因:)
[d[0] for d in derp].index("Spock")
dict(derp)[<key_name>]
dict(derp)['Cat']