2015-09-25 2 views
1

Как написать следующее как одну строку в Python?Как написать это для цикла в одной строке в Python?

my_list = ['ab1c', 'fo2o', 'ba3r'] 
for i in xrange(len(my_list)): 
    my_list[i] = my_list[i][1:3] 

Я попытался

my_list = [x for i in xrange(len(my_list)) my_list[i] = my_list[i][2:3]] 

Но это только возвращает недопустимый синтаксис

+1

Обратите внимание, что это было бы опереться на 'для i, s в перечислении (my_list): my_list [i] = s [1: 3]'; итерация по 'range (len (...))' обычно считается непитонической. – jonrsharpe

+0

Вы можете использовать как my_list = [i [1: 3] для i в my_list] (или) my_list = map (lambda x: x [1: 3], my_list) – Vineesh

ответ

7

метод списка понимание -

my_list[:] = [x[1:3] for x in my_list] 

[:] используется так, что my_list мутируют в месте, как ваш метод for.

Demo -

>>> my_list = ['ab1c', 'fo2o', 'ba3r'] 
>>> my_list[:] = [x[1:3] for x in my_list] 
>>> my_list 
['b1', 'o2', 'a3'] 

Как спросили в комментариях -

Вы можете уточнить разницу с my_list = [x[1:3] for x in my_list]

Очень простой пример кода, чтобы показать разницу -

>>> my_list = ['ab1c', 'fo2o', 'ba3r'] 
>>> a = my_list 
>>> my_list = [x[1:3] for x in my_list] 
>>> my_list 
['b1', 'o2', 'a3'] 
>>> a 
['ab1c', 'fo2o', 'ba3r'] 

Приведенные выше результаты метода в -

>>> my_list = ['ab1c', 'fo2o', 'ba3r'] 
>>> a = my_list 
>>> my_list[:] = [x[1:3] for x in my_list] 
>>> my_list 
['b1', 'o2', 'a3'] 
>>> a 
['b1', 'o2', 'a3'] 

Это потому, что списочные создать новый список, при использовании my_list[:] на левой стороне оператора присваивания вы просите Python мутировать my_list на месте (но когда вы делаете my_list = <something>, вы просто делаете my_list ссылкой на новый список, вместо того, чтобы мутировать исходный список).

+0

Можете ли вы уточнить разницу с ' my_list = [x [1: 3] для x в my_list] '? – wap26

+0

@ wap26, который создает новый список, а не заменяет старый – jonrsharpe

+0

Возможно, сохранение одного и того же списка не было требованием, хотя исходный код сделал. – wap26

Смежные вопросы