迭代列表python

时间:2017-04-10 15:07:37

标签: python iteration

我遇到了在python中迭代的问题。我有这个结构:

a = [('f', 'f'),
 ('a', 'a'),
 ('e', 'e'),
 ('d', 'd'),
 ('e', 'e'),
 ('d', 'd'),
 ('b', 'b'),
 ('e', 'e'),
 ('d', 'd'),
 ('b', 'b'),
 ('a', 'a'),
 ('b', 'b'),
 ('g', 'g'),
 ('h', 'h'),
 ('c', 'c'),
 ('h', 'h'),
 ('a', 'a'),
 ('c', 'c'),
 ('g', 'g'),
 ('h', 'h'),
 ('g', 'g'),
 ('c', 'c'),
 ('f', 'f')]

从那以后我想得到一个输出,它给出了括号的第一个值和下一个括号的值,如下所示:

b = [('f','a'), ('a','e'), ('e','d')etc..]

非常感谢!!

3 个答案:

答案 0 :(得分:5)

只需使用一些列表理解:

[(x[0],y[0]) for x,y in zip(a,a[1:])]

甚至更优雅:

[(x,y) for (x,_a),(y,_b) in zip(a,a[1:])]

您可以使用islice中的itertools来避免使用切片制作副本:

from itertools import islice

[(x,y) for (x,_a),(y,_b) in zip(a,islice(a,1,None))]

这些都给出了:

>>> [(x,y) for (x,_a),(y,_b) in zip(a,a[1:])]
[('f', 'a'), ('a', 'e'), ('e', 'd'), ('d', 'e'), ('e', 'd'), ('d', 'b'), ('b', 'e'), ('e', 'd'), ('d', 'b'), ('b', 'a'), ('a', 'b'), ('b', 'g'), ('g', 'h'), ('h', 'c'), ('c', 'h'), ('h', 'a'), ('a', 'c'), ('c', 'g'), ('g', 'h'), ('h', 'g'), ('g', 'c'), ('c', 'f')]

答案 1 :(得分:2)

b = [(a[i][0], a[i+1][1]) for i in range(len(a)-1)]

答案 2 :(得分:2)

你可以试试这个

map(lambda x, y: (x[0], y[0]), a[:-1], a[1:])

输出:

[('f', 'a'),('a', 'e'),('e', 'd'),('d', 'e'),...]