Как изменить один элемент в подсписке с помощью сжатия списка

#python #list

Вопрос:

Я пишу на python, и у меня есть список, состоящий из 8 подсписков, составленных таким образом: [[значение 1,значение 2,значение 3], …].

Я хочу изменить на «False» только третье значение (value3) во всех подсписках, используя расширение списка, но мой код не работает, и я не знаю, почему.

 [[a, b, False] for a, b, _ in athlete_session_el['top_bottom_first']]
 

athlete_session_el['top_bottom_first'] это список подсписков.

Комментарии:

1. Во всех подсписках

2. Этот код работает для меня. В чем проблема?

3. Что? В моем коде все старые значения остаются в предыдущей конфигурации. Только что проверил

4. Вы назначили результат? athlete_session_el['top_bottom_first'] = [...] ?

Ответ №1:

Следующие работы:

 athlete_session_el = {}
athlete_session_el['top_bottom_first'] = [[1,2,3],[1,2,3],[1,2,3]]

print([[sublist[0], sublist[1], False] for sublist in athlete_session_el['top_bottom_first'] ])

[[1, 2, False], [1, 2, False], [1, 2, False]]
 

Комментарии:

1. Хорошо, да, это работает. Но только если в athlete_session_el[‘top_bottom_first’] у меня есть такие подсписки [(x,y,z)].. У меня есть эти [x,y,z], и «не удается распаковать неитерабельный объект NoneType» вызывает

2. печать([[подсписка[0], подсписка[1], Ложь] для подсписки в athlete_session_el[‘top_bottom_first’] ]) работает с [x,y,z]. Я отредактирую ответ соответствующим образом

Ответ №2:

Вы можете попробовать это

 liste= [[1,2,3],[1,2,3],[1,2,3]]
comp = [False if indx ==2 else y for x in liste for indx, y in enumerate(x) ]