16

値のリストとビンのエッジのリストがあります。ここで、すべての値がどのビンに属しているかを確認する必要があります。次のように、値を反復してからビンを反復し、値が現在のビンに属しているかどうかを確認するよりも、Pythonic な方法はありますか。

my_list = [3,2,56,4,32,4,7,88,4,3,4]
bins = [0,20,40,60,80,100]

for i in my_list:
    for j in range(len(bins)):
        if bins(j) < i < bins(j+1):
            DO SOMETHING

これは私にはあまりきれいに見えません。ありがとう!

4

3 に答える 3

5

たぶん、これはあなたを正しい軌道に乗せるのに役立ちます:

>>> import itertools
>>> my_list = [3,2,56,4,32,4,7,88,4,3,4]
>>> for k, g in itertools.groupby(sorted(my_list), lambda x: x // 20 * 20):
...     print k, list(g)
... 
0 [2, 3, 3, 4, 4, 4, 4, 7]
20 [32]
40 [56]
80 [88]
于 2013-02-19T00:45:33.820 に答える
4

まず第一に、値がビンの境界と等しい場合、コードは失敗します -

変化する

if bins(j) < i < bins(j+1):

どこかに<=看板を立てる。

その後、bisectモジュールを使用します

import bisect
bisect.bisect(x, bins)

また bisect.bisect_right

値がビンの境界にあるときに、より高いビンとより低いビンのどちらを使用するかによって異なります。

于 2013-02-19T00:46:35.080 に答える