Как вычесть константу из членов подсписка?

#python #list-comprehension

#python #список-понимание

Вопрос:

Я знаю, что могу вычесть константу из всех членов простого списка, подобного этому:

 l = [ 123, 124, 125, 126 ]
l = [v - 100 for v in l]
  

Но как я могу вычесть константу из одного или нескольких конкретных членов каждого подсписка в списке?

Предположим, у меня есть:

 l = [ [101, 102, 103], [111, 122, 133], [222, 333, 444] ]
  

Я хочу вычесть, скажем, 100 из 2-го и 3-го элементов каждого подсписка, чтобы дать мне:

 [ [101, 2, 3], [111, 22, 33], [222, 233, 344] ]
  

Есть ли простой Pythonic способ сделать это?

Ответ №1:

В простейшей форме вы можете распаковать подсписки и применить операцию к нужным элементам:

 In [1]: l = [ [101, 2, 3], [111, 22, 33], [222, 233, 344] ]

In [2]: [[x, y - 100, z - 100] for x, y, z in l]
Out[2]: [[101, -98, -97], [111, -78, -67], [222, 133, 244]]
  

Или, немного более масштабируемым подходом было бы понимание вложенного списка:

 In [3]: [[item[0]]   [x - 100 for x in item[1:]] for item in l]
Out[3]: [[101, -98, -97], [111, -78, -67], [222, 133, 244]]
  

Ответ №2:

Если вы действительно хотите однострочный, попробуйте:

 l = map(lambda x : x[0:1] map(lambda y: y-100, x[1:3]) x[3:], l)
  

В Python есть хороший синтаксис для очень простых вещей, но для чего-то подобного вам лучше всего использовать функционалы или циклы.

Ответ №3:

 map(lambda x:map(lambda y: y if x.index(y)==0 else y-100,x),l) 
  

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

1. Пожалуйста, добавьте небольшое объяснение. Это помогло бы как OP, так и другим с аналогичными проблемами.