7

リストがあります:

d = [23, 67, 110, 25, 69, 24, 102, 109]

最も近い値を動的ギャップでグループ化し、このようなタプルを作成するにはどうすればよいですか?最速の方法は何ですか? :

[(23, 24, 25), (67, 69), (102, 109, 110)]
4

1 に答える 1

21

好き

d = [23,67,110,25,69,24,102,109]

d.sort()

diff = [y - x for x, y in zip(*[iter(d)] * 2)]
avg = sum(diff) / len(diff)

m = [[d[0]]]

for x in d[1:]:
    if x - m[-1][0] < avg:
        m[-1].append(x)
    else:
        m.append([x])


print m
## [[23, 24, 25], [67, 69], [102, 109, 110]]

まず、連続する要素間の平均差を計算してから、差が平均よりも小さい要素をグループ化します。

于 2012-04-04T18:18:41.720 に答える