#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, так и другим с аналогичными проблемами.