在元组列表中查找元素


140

我有一个清单“ a”

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

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

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

我怎么做?

Answers:



115

实际上,有一种聪明的方法可以用于任何元组列表,其中每个元组的大小为2:您可以将列表转换成一个字典。

例如,

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

11
您如何将此应用于布鲁斯的问题?
HelloGoodbye 2014年

5
好的答案(尽管可能不是这个问题)。对我来说很好,可以确定一个值是否在选择的元组列表中(例如,测试中是否为“ hi”)
MagicLAMP 2015年

10
正如MagicLAMP所建议的那样,它并不能真正回答问题。具体来说,dict(X)将X转换为字典,其中任何常见的第一个元素的最后一个元组都是所使用的值。在OP的示例中,这将返回(1,4),而不是(1,2)和(1,4)。
BBischof

23

阅读列表理解

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

还要阅读生成器函数yield语句。

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

result= list( filter_value( a, 1 ) )

1
if x == 1应该是if x == value
sambha




1

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

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

它会在列表中的元组中搜索是否出现1。如果搜索仅限于第一个元素,则可以将解决方案修改为:

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

1

使用过滤功能:

>>> def get_values(iterables,key_to_find):
返回列表(过滤器(lambda x:x中的key_to_find,可迭代)) >>> a = [(1,2 ,,(1,4),(3,5),(5,7)] >>> get_values(a,1) >>> [(1,2),(1,4)]

1

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

0

如果要在元组中搜索元组中存在的任何数字,则可以使用

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]如果要搜索特定索引中的数字,也可以使用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.