2017-01-13 3 views
0

Newbie Coder hier bekommen, versuchen, eine Hausaufgabe abzuschließen:Der Versuch, eine Liste der Quadrate der geraden Zahlen in einer Matrix zu erstellen, Fehler

ist eine 2D-Matrix, erstellen Sie eine Liste der Quadrate aller sogar Gegeben Zahlen in der Matrix.

Hier ist mein Code:

myMatrix = [[1, 2, 'aa',3, 4], 

     ['dd',5, 6, 7], 

     [8, 9, 10,'cc']] 
list=[i for row in myMatrix for i in row ] 
V=[x**2 for x in list if x % 2 ==0] 
V 

ich die folgende Störung erhalte:

TypeError         Traceback (most recent call last) 
<ipython-input-95-6fae11330bf9> in <module>() 
    5    [8, 9, 10,'cc']] 
    6 list=[i for row in myMatrix for i in row ] 
----> 7 V=[x**2 for x in list if x % 2 ==0] 
    8 V 

<ipython-input-95-6fae11330bf9> in <listcomp>(.0) 
    5    [8, 9, 10,'cc']] 
    6 list=[i for row in myMatrix for i in row ] 
----> 7 V=[x**2 for x in list if x % 2 ==0] 
    8 V 

TypeError: not all arguments converted during string formatting 

Jede Idee, wo ich falsch gehe?

Antwort

1

Versuchen Sie folgendes:

new_list = [] 
for row in myMatrix: 
    for x in row: 
     if isinstance(x, int) and x % 2 == 0: 
      new_list.append(x ** 2) 

print new_list 
# [4, 16, 36, 64, 100] 

oder über Liste Verständnis:

new_list = [x**2 for row in myMatrix for x in row if instance(x, int) and x%2==0] 

Auch sollten Sie nicht list als Variablennamen verwenden, da es ein reservierter Datentyp ist.

+0

Vielen Dank! Kannst du mir sagen, warum * mein ursprünglicher Code fehlgeschlagen ist? –

+0

Nr. Sie haben die 'instance (x, int)' vergessen, die alle Nicht-Integer-Elemente herausfiltert. Sie könnten in diesem Fall auch 'type (x) == int' verwenden. –

2

Ihre Matrix enthält auch str Werte zusammen mit int. Und Sie können die Mod % Operation auf str Objekt nicht ausführen. Wenn Sie dies tun, erhalten Sie TypeError. Zum Beispiel:

>>> 'aa' % 2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: not all arguments converted during string formatting 

Da Ihre Matrix sollte ein Quadrat von sogar Zahlen sein, warum sind Sie sogar die str als Teil davon?

Verwandte Themen