2010-12-29 8 views
1

私はこれがノービスの質問であることを知っています。私はそれを理解できませんでした。 < 私は-1000 to 1000からの番号を持っており、番号0 to 200にマップする必要があります。 私はそれがmap()機能と関係していると思いますが、わかりません。マッピング番号

おかげ

+1

あなただけの数字のものを2セットのネイティブのマッピングがありますことを前提としていますか?地獄はどのように-1000から1000の0から200までのマップですか? – Falmarri

+1

私はそれを正しく言いましたかわかりません。この場合、0は100、-500、50となり、500は150 – giodamelio

答えて

2

"0、100、-500となり50と500は150になるだろう" 次の関数しようと次に

:この方法で

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

を:

mapNumber(-1000) 
> 0 

mapNumber(-500) 
> 50 

mapNumber(0) 
> 100 

mapNumber(500) 
> 150 

mapNumber(1000) 
> 200 

これは、整数を整数にマップします。そしてあなたのターゲット範囲が10倍小さいので、同じ10個の異なる数字をマッピングします。

あなたは浮動小数点数を取得したい場合は、これを試してみてください。

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

私はそれが欲しかったように働いてくれてありがとう。 – giodamelio

0

入力範囲は[-1000,1000] [0200]の出力範囲よりもはるかに大きいので、多くの数字は[0200]で同じ値にマッピングしてしまいます。これを行う最も簡単な方法は、入力番号mod 201のモジュロを取ることです。これは常に[0,200]に番号を与えます。

あなたは数字のlistにこれを実行する必要がある場合は、

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

多くの場合、代わりにリストの内包表記を使用してPythonで好まれているようmap機能を使用することができます。

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

Makになります。私は 'inlist = [ - 1000,9,999]'を理解できません。なぜ 'inlist = range(-1000,1001)'ではないのですか? –

+1

@ Uphill_What'1:例として小さな数字のセットを使用しました。 'range(-1000,1001)'を使って、すべてのマッピングを見つけることができます。しかし、それをあらかじめ計算しておけば、それは単なる演算であり、%演算子を使って必要に応じてオンザフライで数値を変換することができるので、 'list'から見てもほとんど使いません。 – MAK