python:以更好的方式编写代码?

时间:2015-02-27 12:20:11

标签: python

这是一个示例代码

    >>> 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')]

有没有其他方法可以写这个?说,也许作为一个班轮?上面的代码更适合通过控制台运行。

全部谢谢

4 个答案:

答案 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')]