擅长:python、mysql、java
<pre><code>import sys
# Sorted numbers.
xs = [0.1, 0.2, 1, 4, 100, 110]
xs.sort()
# Reverse-sorted (RATIO, INDEX) tuples.
tups = sorted(
(
(xs[i] / xs[i - 1] if i else 0, i)
for i, x in enumerate(xs)
),
reverse = True,
)
# Indexes of the boundaries having the largest ratios.
n_groups = int(sys.argv[1])
boundaries = sorted(tup[1] for tup in tups[0 : n_groups - 1])
boundaries.append(None)
# Create the groups, based on those boundaries.
groups = []
i = 0
for j in boundaries:
groups.append(xs[i:j])
i = j
# Check.
for g in groups:
print(g)
</code></pre>
<p>输出示例:</p>
<pre><code># n_groups = 1
[0.1, 0.2, 1, 4, 100, 110]
# n_groups = 2
[0.1, 0.2, 1, 4]
[100, 110]
# n_groups = 3
[0.1, 0.2]
[1, 4]
[100, 110]
# n_groups = 4
[0.1, 0.2]
[1]
[4]
[100, 110]
# n_groups = 5
[0.1]
[0.2]
[1]
[4]
[100, 110]
</code></pre>