我遇到了在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..]
非常感谢!!
答案 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'),...]