2017-01-04 10 views
-2

ので、同様に、私は、各タプルの2つの要素を持つタプルのリストを持っている:タプルのリスト内のすべてのタプルの2番目の要素にアクセスする方法はありますか?

[('cat', 'meow'), ('dog', 'bark'), ('wolf', 'bark'), ('cow', 'moo')] 

私は、以前のタプルに樹皮や鳴き声を持って樹皮を持つタプル、および印刷動物の名前を探しています:

cat, dog 
dog, wolf 

これは、Cのリンクされたリストの前と次のポインタを使用して行うことができますが、Pythonで同じことを行う組み込みのメソッドがありますか?

+1

私はあなたがやろうとしているものを理解していけませんか? – Ezio

+0

2番目の要素が樹皮で、前のタプルが2番目の要素として樹皮または草を持っているすべてのタプルの最初の要素を返したいとします。ここでは、最初の樹皮(犬、樹皮)を探しています。今、私は前のタプルに戻り、それが第2の要素として樹皮または草があるかどうかを調べる必要があります。もしそうなら、リストの元の順序でタプルの両方の最初の要素を出力します。 – user110327

+0

@PaulRooney cat、dogも結果になります。なぜなら、前のタプルの2番目の要素= meow |樹皮 – user110327

答えて

2

これを行うための組み込みメソッドが必要ではないとは思っていません。リストの各要素をスキャンして結果を得ることができます。これを見てみましょう:

L = [("cat", "meow"), ("dog", "bark"), ("wolf", "bark"), ("cow", "moo")] 
for idx in range(1,len(L)): 
    if L[idx][1] == "bark": 
     if L[idx-1][1] in ["bark", "meow"]: 
      print L[idx-1][0]+", "+L[idx][0] 

希望します。

1
list = [('cat', 'meow'), ('dog', 'bark'), ('wolf', 'bark'), ('cow', 'moo')] 
filter1st = ["bark","meow"] 
filter2nd = ["bark"] 

for i in range(1,len(list)): 
    (name1,sound1)=list[i-1] 
    (name2,sound2)=list[i] 
    if sound1 in filter1st and sound2 in filter2nd: 
    print name1 + ", " + name2 
1

より機能的なアプローチは

inp = [('cat', 'meow'), ('dog', 'bark'), ('wolf', 'bark'), ('cow', 'moo')] 

for (an1, snd1), (an2, snd2) in zip(inp, inp[1:]): 
    if snd2 == 'bark' and snd1 in ('bark, meow'): 
     print('%s, %s' % (an1, an2)) 

一度に2それ以上の要素を反復処理し、リストやリストのスライスにzipを使用することができるかもしれません。それはおそらく、あなたが築き上げたものに近いところにあるでしょう。

1

あなたは(あなたがとにかく要素をスキャンする必要があります)そのため、単純なリストの内包表記を使用することができます。

v = [("cat", "meow"), ("dog", "bark"), ("wolf", "bark"), ("cow", "moo")] 

print [ itm[0] for itm in v if itm[1] in ["bark", "meow"] ] 
関連する問題