2017-03-31 2 views
0

Ich versuche, dieses Tutorial here mit Python 3.5 zu folgen, aber ich bekomme Fehler statt der erwarteten Ergebnisse. Außerdem würde ich mich freuen, wenn Sie erklären, was die angegebene Zeile unten tut.Python 3.5 'Liste' Objekt hat kein Attribut 'min' und unorderable Typen: str() <int() und

import matplotlib.pyplot as plt 
x=[1,2,3,4,5] 
y=[1,2,3,4,5] 

list1, list2 = [123, 'xyz', 'zara', 'abc'], [456, 700, 200] 
print ("min value element : ", min(list1)) 
print ("min value element : ", min(list2)) 

plt.scatter(x, y, color='red') 
#please explain this line: 
plt.plot([y.min(), y.max()], [y.min(), y.max()], color='blue', linewidth=3) 

plt.show() 

Antwort

0

Das Problem ist wahrscheinlich, dass Sie die Listen in min und max wie diese passieren müssen:

plt.plot([min(y), max(y)], [min(y), max(y)], color='blue', linewidth=3) 

Momentan wird dies nur zeichnet eine Linie zwischen [1,1] und [5, 5].

Wenn Sie x und y gegeneinander darstellen möchten können Sie dies tun:

plt.plot(x, y, color='blue', linewidth=3) 

Im Falle von list1 Sie haben eine Liste mit ints und Saiten so werden die Saiten nur von min ignoriert und max.

0

Numpy-Arrays haben Min- und Max-Methoden, Python-Listen nicht. Python hat min und maxfunctions, die auf numpy Arrays insbesondere langsamer sind, da sie alle Einträge als Python-Objekte durchlaufen würden. Dieses Tutorial bezieht sich fälschlicherweise auf die Funktionen methods und arbeitet mit Iterablen, nicht unbedingt mit Listen.

1

In Python 3 sind Vergleichsoperationen strenger für die eingebauten Datentypen.

>>> min([123, 'xyz', 'zara', 'abc']) 
TypeError: unorderable types: str() < int() 

min() versucht 'xyz' < 123 zu vergleichen, die in Python 2 möglich war, aber nicht in Python 3.

Wenn Sie das kleinste Element einer Liste erhalten möchten, verwenden Sie min(list), nicht list.min().

Dies sollte zum Beispiel arbeiten:

plt.plot([min(y), max(y)], [min(x), max(x)], color='blue', linewidth=3) 
Verwandte Themen