2010-12-29 13 views
1

Ich weiß, das ist eine noobish Frage gestellt, ich konnte es nicht herausfinden>. < Ich habe eine Nummer von -1000 to 1000 und ich muss es auf die Nummern 0 to 200 zuordnen. Ich denke, es hat mit der map() Funktion zu tun, aber ich bin mir nicht sicher.Mapping-Nummern

Dank

+1

Vermuten Sie, nur, dass es eine native Mapping dieser 2 Sätze von Zahlen? Wie zur Hölle ist -1000 bis 1000 Karte von 0 bis 200 – Falmarri

+1

Ich bin nicht sicher, ob ich es richtig formuliert habe. In diesem Fall wäre 0 100, -500, wäre 50 und 500 wäre 150 – giodamelio

Antwort

2

"0 wäre 100, -500, 50 wäre und 500 wäre 150"

Dann versuchen Sie die folgende Funktion:

def mapNumber(a): 
    return int(a + 1000)/10 

auf diese Weise:

mapNumber(-1000) 
> 0 

mapNumber(-500) 
> 50 

mapNumber(0) 
> 100 

mapNumber(500) 
> 150 

mapNumber(1000) 
> 200 

Dies wird Ihre Ganzzahlen in Ganzzahlen abbilden. Und da Ihr Zielbereich 10-mal kleiner ist, werden 10 verschiedene Zahlen auf denselben Wert abgebildet.

Wenn Sie eine Fließkommazahl erhalten möchten, versuchen Sie dies:

def mapNumber(a): 
    return (a + 1000.)/10. 
+0

Danke das funktionierte genau so wie ich es wollte. – giodamelio

0

Da der Eingangsbereich [-1000,1000] ist viel größer als der Ausgangsbereich von [0,200], werden viele Zahlen Mapping auf den gleichen Wert in [0200] enden. Der einfachste Weg wäre, den Modulo der Eingangsnummer mod 201 zu nehmen. Dadurch erhalten Sie immer eine Zahl in [0,200].

Wenn Sie diese Zahlen auf eine list tun müssen, können Sie die map Funktion wie verwenden, so

inlist=[-1000,9,999] 
outlist=map(lambda x:x%201, inlist) 
print outlist 

Es wird oft in Python bevorzugt stattdessen eine Liste Verständnis zu verwenden.

inlist=[-1000,9,999] 
outlist=[x%201 for x in inlist] 
print outlist 
+0

Mak, ich verstehe nicht die 'inlist = [- 1000,9,999]'. Warum nicht 'inlist = range (-1000, 1001)'? –

+1

@ Uphill_What'1: Ich habe nur eine kleine Reihe von Zahlen als Beispiel verwendet. Sie können 'range (-1000,1001)' verwenden, um die Zuordnung für alle zu ermitteln. Aber es ist wenig sinnvoll, sie vorberechnen zu lassen und dann von einer "Liste" nach oben zu schauen, da es sich nur um eine Operation handelt und Sie einfach den Operator% verwenden können, um Zahlen bei Bedarf zu konvertieren. – MAK