2015-02-27 4 views
1

вот пример кода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')] 

Есть альтернативный способ, чтобы написать это? скажем, может быть, как однострочный? Вышеприведенный код лучше подходит для работы через консоль.

Спасибо всем

+1

Я голосующий, чтобы закрыть этот вопрос как не по теме, потому что он лучше подходит для http://codereview.stackexchange.com/ –

+0

@MichaelFoukarakis Спасибо за предложение! Никогда не знал, что существует кодовое обозрение. – nicki

+1

@MichaelFoukarakis Пример кода не по теме для обзора кода. –

ответ

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 выполняет две или более итераций и дает кортеж с текущим элементом для каждой итерации до тех пор, пока не будет достигнут конец итерации с наименьшей длиной.

+1

Это намного легче читать, чем мой однострочный. :) И более эффективный. –

+0

Я согласен с @ PM2Ring, что его гораздо легче читать. Спасибо большое :) – nicki

+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

Это может быть сделана как однострочник, но это выглядит довольно некрасиво.

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] 
+0

Большое спасибо за совет подчеркивания. – nicki

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')] 
Смежные вопросы