在元组列表中查找元素

Posted

技术标签:

【中文标题】在元组列表中查找元素【英文标题】:Find an element in a list of tuples 【发布时间】:2011-01-12 14:21:13 【问题描述】:

我有一个列表'a'

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

我需要找到特定数字的所有元组。说1会是

result = [(1,2),(1,4)]

我该怎么做?

【问题讨论】:

【参考方案1】:

如果你只想匹配第一个数字,你可以这样做:

[item for item in a if item[0] == 1]

如果您只是搜索包含 1 的元组:

[item for item in a if 1 in item]

【讨论】:

【参考方案2】:

实际上有一种聪明的方法可以做到这一点,它对于每个元组大小为 2 的任何元组列表都很有用:您可以将列表转换为单个字典。

例如,

test = [("hi", 1), ("there", 2)]
test = dict(test)
print test["hi"] # prints 1

【讨论】:

你如何将这个应用到布鲁斯的问题上? 很好的答案(虽然可能不是这个问题)。对我来说很好地确定一个值是否在选择元组列表中(例如,如果“hi”在测试中) 正如 MagicLAMP 所建议的那样,它并没有真正回答这个问题。具体来说,dict(X) 将 X 转换为字典,其中任何常见的第一个元素的最后一个元组是使用的值。在 OP 的示例中,这将返回 (1,4),而不是 (1,2) 和 (1,4)。 这可能无法回答上面的问题,但这正是我要找的。​​span> 喜欢,谢谢分享。【参考方案3】:

阅读List Comprehensions

[ (x,y) for x, y in a if x  == 1 ]

同时阅读generator functions 和yield 声明。

def filter_value( someList, value ):
    for x, y in someList:
        if x == value :
            yield x,y

result= list( filter_value( a, 1 ) )

【讨论】:

if x == 1 应该是if x == value【参考方案4】:
[tup for tup in a if tup[0] == 1]

【讨论】:

【参考方案5】:
for item in a:
   if 1 in item:
       print item

【讨论】:

【参考方案6】:

filter 函数也可以提供一个有趣的解决方案:

result = list(filter(lambda x: x.count(1) > 0, a))

在列表a 中搜索任何出现的1 的元组。如果搜索仅限于第一个元素,解决方案可以修改为:

result = list(filter(lambda x: x[0] == 1, a))

【讨论】:

【参考方案7】:

使用过滤功能:

>>> def get_values(iterables, key_to_find):
        return list(filter(lambda x:key_to_find in x, iterables))

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

>>> get_values(a, 1)

>>> [(1, 2), (1, 4)]

【讨论】:

【参考方案8】:
>>> [i for i in a if 1 in i]

[(1, 2), (1, 4)]

【讨论】:

虽然正确,但这与 8 年前发布的已接受答案中的 [item for item in a if 1 in item] 有何不同?另请注意,这也将匹配 (2, 1)(4, 1)【参考方案9】:

takewhile,(除此之外,还显示了更多值的示例):

>>> a= [(1,2),(1,4),(3,5),(5,7),(0,2)]
>>> import itertools
>>> list(itertools.takewhile(lambda x: x[0]==1,a))
[(1, 2), (1, 4)]
>>> 

如果未排序,例如:

>>> a= [(1,2),(3,5),(1,4),(5,7)]
>>> import itertools
>>> list(itertools.takewhile(lambda x: x[0]==1,sorted(a,key=lambda x: x[0]==1)))
[(1, 2), (1, 4)]
>>> 

【讨论】:

【参考方案10】:

如果您想在元组中搜索元组中存在的任何数字,那么您可以使用

a= [(1,2),(1,4),(3,5),(5,7)]
i=1
result=[]
for j in a:
    if i in j:
        result.append(j)

print(result)

如果您想在特定索引中搜索数字,也可以使用if i==j[0] or i==j[index]

【讨论】:

以上是关于在元组列表中查找元素的主要内容,如果未能解决你的问题,请参考以下文章

在元组中打印元素,不带逗号,引号和括号

在python中,我应该如何在元组列表上实现最小堆?

在元组列表中查找索引位置

Python:在元组列表和嵌套列表中比较并查找匹配项

python在元组,列表和字典变量前加*的作用

如何比较和搜索列表中的元素与列表 SML 中的元组