2016-09-14 4 views
1

の一部だけを返しているI次のコードを持っている:マップは、()の引数

a = '0' 
b = '256' 
mod_add = ['300', '129', '139'] 
list(map(lambda a, b, x: (a < x) and (x < b), a, b, mod_add)) 

私はMOD_ADD内のすべての要素をチェックしたいのですが、

list(map(lambda a, b, x: (a < x) and (x < b), a, b, mod_add)) 

戻っ一つだけFalseを。 一部の値の場合、(a = '100', b = '200')'False', 'False', 'False'を返します。

私は間違っていますか?

+1

あなたは文字列を比較しようとしているか、整数値を比較したいと思いますか?たとえば、20 <100しかし '20'> '100' – desiato

答えて

2

あなたが本当にmapを使用する必要がある場合:

list(map(lambda x: (a < x) and (x < b), mod_add)) 

編集:

リストからmap一つだけの要素に願いを受けて、それは実際にそれを行うために私には、そのような意味がありません。 。しかし、それがあなたがしたいことなら、試してみることができます:

list(map(lambda x: (a < x) and (x < b), [mod_add[0]])) 

私はこれが役立ちます。

+0

ありがとう!(例えば、ある要素だけをチェックする必要があるが、エラーを返す場合は、>>>リスト(lambda x:(a 」、ライン1、中 例外TypeError:リストは()それは本当に、単一の要素をマッピングしても意味がありません与えられた最大で1引数(2) ' – grindelwaldus

+0

を取りますあなたが本当に主張しているのなら、 'list(map(lambda x:(a Abdou

+0

私は、私は 'list(lambda x:(a grindelwaldus

2

abは文字列です、あなたが意図したとおり、彼らは当然map、ない定数でイテラブルとして扱われます。あなたは、リストの内包表記を使用するかどう渡す必要がありますいずれかのパラメータとしてabmapへ:

>>> [a < x < b for x in mod_add] 
[False, True, True] 

比較任意に連鎖させることができますので、(a < x) and (x < b)a < x < b


は、文字列の代わりに、整数を比較すると交換することができます(これはおそらくあなたが望むものです)はもう一つのステップです。

>>> [int(a) < int(i) < int(b) for i in mod_add] 
[False, True, True] 
+0

ちょうどintersted、タイプをintに変更するとmap()でチェックする方法はありますか? – grindelwaldus

+0

@grindelwaldusはい、なぜ私は表示されません –

0

これは本当にあなたがリスト内包を好むべきものです。

min_, max_ = '0', '256' 
# do you mean for these to be compared lexicographically?! 
# be aware that '0' < '1234567890' < '256' is True 

mod_add = ['300', '129', '139'] 

result = [min_ < mod < max_ for mod in mod_add] 
# [False, True, True] 

mapfilterreduce(今functools.reduce)確かに強大なツールですが、Pythonは簡単に式を読み取るために、より詳細に賛成して、そこから敬遠する傾向があります。

0
a = '0' 
b = '256' 
mod_add['300', '129', '139'] 
map(lambda x: int(a)<int(x)<int(b), mod_add) 

出力:

[False, True, True] 
関連する問題