这是一个示例代码
>>> array = [('The', 'Blue'),('men','Green'),('his','Red'),('beautiful','Yellow')]
>>> z = [y for (x,y) in array]
>>> l=[(z[i],z[i+1]) for i in range (len(z)-1)]
>>> l
>>> [('Blue', 'Green'), ('Green', 'Red'), ('Red', 'Yellow')]
有没有其他方法可以写这个?说,也许作为一个班轮?上面的代码更适合通过控制台运行。
全部谢谢
答案 0 :(得分:3)
您可以使用zip
功能:
>>> array = [('The', 'Blue'),('men','Green'),('his','Red'),('beautiful','Yellow')]
>>> z = [y for (x,y) in array]
>>> zip(z,z[1:])
[('Blue', 'Green'), ('Green', 'Red'), ('Red', 'Yellow')]
答案 1 :(得分:3)
将所有答案拉到一起,这个单行将起作用:
a = [('The', 'Blue'),('men','Green'),('his','Red'),('beautiful','Yellow')]
l = [(i[1],j[1]) for i,j in zip(a, a[1:])]
结果:
>>> print(l)
>>> [('Blue', 'Green'), ('Green', 'Red'), ('Red', 'Yellow')]
只是要解释一下,zip
内置函数需要两个或更多个迭代,并为每个迭代生成一个包含当前项的元组,直到达到具有最小长度的iterable的末尾。
答案 2 :(得分:1)
这可以作为一个单行,但它看起来很丑。
a = [('The', 'Blue'),('men','Green'),('his','Red'),('beautiful','Yellow')]
l = zip(zip(*a)[1], zip(*a)[1][1:])
两行很多更好:
colors = zip(*a)[1]
l = zip(colors, colors[1:])
FWIW,您可以删除
中的括号z = [y for (x,y) in array]
由于你没有使用x
,因此用下划线代替它是常见的:
z = [y for _,y in array]
答案 3 :(得分:1)
array = [('The', 'Blue'),('men','Green'),('his','Red'),('beautiful','Yellow')]
result = [(array[i][1], array[i+1][1]) for i in xrange(len(array)-1)]
print result
收率:
[('Blue', 'Green'), ('Green', 'Red'), ('Red', 'Yellow')]