2015-04-26 2 views
-1

У меня есть список подсписков подобное:Как изменить n-й элемент в списке списков с помощью списков python?

posts = [[1, 'text1', 0], [1, 'text2', 0]] 

и функция change_text(text)

как я могу применить эту функцию только текстовые элементы каждого подсписком?

я попытался это:

posts = [change_text(post[1]) for post in posts] 

, но я получил только тексты ['changed_text1', 'changed_text2']

+0

Как выглядит функция? Каков ваш ожидаемый результат? –

+0

этот пример просто, но позволяет предположить, что он меняет текст на «измененный текст», что я ожидаю получить: [[1, 'changed_text1', 0], [1, 'changed_text2', 0], а не текстовые поля только. –

ответ

2

Вы можете получить список в списке понимание

>>> change_text = lambda x:'changed_'+x 
>>> posts = [[1, 'text1', 0], [1, 'text2', 0]] 
>>> [[post[0],change_text(post[1]),post[2]] for post in posts] 
[[1, 'changed_text1', 0], [1, 'changed_text2', 0]] 
+0

Спасибо, это просто, когда вы видели его хотя бы один раз. –

+0

Да, я ждал вашего комментария, чтобы опубликовать ответ –

0

Одним из способов может быть

[[post[0], change_text(post[1]), post[2]] for post in posts] 
0

Вы можете сделать редактирование непосредственно во втором элементе без создания другого нового списка.

>>> change_text = lambda x:'changed_'+x 
>>> posts = [[1, 'text1', 0], [1, 'text2', 0]] 
>>> for m in posts: 
     m[1] = change_text(m[1]) 


>>> posts 
[[1, 'changed_text1', 0], [1, 'changed_text2', 0]] 
Смежные вопросы