2013-08-15 2 views
5

Я просто попытался изучить как списки, так и функции лямбда. Я думаю, что понимаю концепцию, но мне поручена задача создания программы, которая при подаче положительного целого создает матрицу идентичности. В принципе, если бы я подал в 2, это дало бы мне: [[1, 0], [0, 1]], и если бы я дал ему 3: [[1, 0, 0], [0, 1, 0], [0 , 0, 1], поэтому список внутри списка.Python Lambda Identity Matrix

Теперь мне нужно создать все это в пределах лямбда-функции. Так что, если я наберу:

FUNCTIONNAME (x) будет получать идентификационную матрицу размера x-by-x.

Кстати, x всегда будет положительным целым числом.

Это то, что я до сих пор:

FUNCTIONNAME = lambda x: ##insertCodeHere## for i in range(1, x) 

Я думаю, что я делаю это правильно, но я не знаю. Если у кого-то есть идея, пожалуйста, помогите!

ответ

6

Как насчет:

>>> imatrix = lambda n: [[1 if j == i else 0 for j in range(n)] for i in range(n)] 
>>> imatrix(3) 
[[1, 0, 0], [0, 1, 0], [0, 0, 1]] 

1 if j == i else 0 является примером в Python conditional expression.

+0

СПАСИБО за подробное объяснение! – NoviceProgrammer

4

Это будет мой любимый способ сделать это:

identity = lambda x: [[int(i==j) for i in range(x)] for j in range(x)] 

Он использует тот факт, что True карты на 1 и False карты до 0.

3

Просто для полноты (и, чтобы подчеркнуть, как один действительно должен делать числовой материал в питоне):

import numpy 
list_eye = lambda n: numpy.eye(n).tolist() 

конечно, на практике вы, вероятно, просто использовать eye(n) и работать с массивами numpy.