2013-08-15 20 views
5

Próbowałem nauczyć się zarówno rozumienia list, jak i funkcji Lambda. Myślę, że rozumiem tę koncepcję, ale otrzymałem zadanie stworzenia programu, który po podaniu dodatniej liczby całkowitej tworzy matrycę tożsamości. Zasadniczo, gdybym karmił 2, dałbym mi: [[1, 0], [0, 1]] i gdybym dał 3: [[1, 0, 0], [0, 1, 0], [0 , 0, 1], więc wyświetl listę na liście.Python Lambda Identity Matrix

Teraz muszę utworzyć to wszystko w ramach funkcji lambda. Tak więc, jeśli piszę:

FUNCTIONNAME (x) pobierze macierz tożsamości o wielkości x-by-x.

Przy okazji x zawsze będzie dodatnią liczbą całkowitą.

To, co mam tak daleko:

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

myślę, robię to dobrze, ale nie wiem. Jeśli ktoś ma pomysł, proszę o pomoc!

Odpowiedz

6

Jak o:

>>> 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 jest przykładem Pythona conditional expression.

+0

Dziękuję za szczegółowe wyjaśnienie! – NoviceProgrammer

4

Byłby to mój ulubiony sposób, aby to zrobić:

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

Trzeba wykorzystać fakt, że True mapy na 1 i False mapy 0.

3

Tylko dla kompletności (oraz podkreślenie jak naprawdę powinien robić rzeczy liczbową w Pythonie):

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

oczywiście, w praktyce ty pewnie po prostu używać eye(n) sam w sobie i pracuj z niezliczonymi tablicami.