有没有办法访问元组列表中每个元组的第二个元素?

时间:2017-01-04 11:29:35

标签: python python-2.7 list tuples

我有一个元组列表,每个元组中有两个元素,如下所示:

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

我正在寻找带有树皮的元组,这些树皮在之前的元组中有树皮或喵喵声,并且印有动物名称:

cat, dog
dog, wolf

我知道这可以使用C链表中的上一个和下一个指针来完成,但是有没有内置的方法在Python中做同样的事情?

4 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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))

您可以在列表和列表的切片上使用zip,一次迭代2个元素。那可能就像你得到的那样接近。

答案 3 :(得分:1)

您可以使用简单的列表理解(无论如何都需要扫描元素):

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

print [ itm[0] for itm in v if itm[1] in ["bark", "meow"] ]