タプルのリストから要素を見つける


139

リスト「a」があります

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

特定の番号のすべてのタプルを検索する必要があります。1と言う

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

それ、どうやったら出来るの?

回答:


236

最初の番号を一致させるだけの場合は、次のようにします。

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

1を含むタプルを検索するだけの場合:

[item for item in a if 1 in item]

115

実際にこれを行うには、各タプルのサイズが2であるタプルのリストに便利な賢い方法があります。リストを単一の辞書に変換できます。

例えば、

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

11
これをブルースの問題にどのように適用しますか?
HelloGoodbye 2014年

5
良い答えです(ただし、この質問にはおそらく対応していません)。値が選択タプルのリストにあるかどうかを判断するのにうまくいきました(たとえば、テストで「hi」の場合)
MagicLAMP

10
MagicLAMPが示唆しているように、それは実際には質問に答えません。具体的には、dict(X)Xをディクショナリに変換します。ここで、共通の最初の要素の最後のタプルは、使用される値です。OPの例では、これは(1,2)と(1,4)の両方ではなく(1,4)を返します。
BBischof 2016年

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 2015



1

フィルター機能の使用:

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


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

このfilter関数は、興味深い解決策を提供することもできます。

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

リスト内のタプルを検索して、の出現を探します1。検索が最初の要素に限定されている場合、ソリューションは次のように変更できます。

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

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]特定のインデックスで数値を検索する場合にも使用できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.