在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']