我有一个元组列表,每个元组中有两个元素,如下所示:
[('cat', 'meow'), ('dog', 'bark'), ('wolf', 'bark'), ('cow', 'moo')]
我正在寻找带有树皮的元组,这些树皮在之前的元组中有树皮或喵喵声,并且印有动物名称:
cat, dog
dog, wolf
我知道这可以使用C链表中的上一个和下一个指针来完成,但是有没有内置的方法在Python中做同样的事情?
答案 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"] ]