0

我想从许多收藏中选择 15 张图片。图像数量取决于该集合中图像的比例。

我的代码如下:

image_counts = [16, 2, 14]
total_images = 0
for i in image_counts:
    total_images += i
proportions = [1.0 * i / total_images for i in image_counts]
counts = [int( round( 15 * i)) for i in proportions]

[8, 1, 7]由于四舍五入,输出加起来为 16。如何获得一个加起来正好 15 个的列表?

4

3 回答 3

1

您的选择之一是:

image_counts = [16, 2, 14]
total_images = sum(image_counts)

proportions = [1.0 * i / total_images for i in image_counts]
counts = [int(15 * i) for i in proportions]
if sum(counts) < 15:
    counts[counts.index(min(counts))] += 1

要完成此答案:

counts[counts.index(min(counts))] += 15 - sum(counts[1:]) # from user1654936

并将最终列表截断为 15 个元素。

于 2012-09-08T08:35:52.200 回答
1

在大多数情况下,不可能根据计算的比例准确选择计数。因此,因为无论如何您都必须偏离比例,所以您可以更改例如counts列表的第一个数字,以便它加起来等于所需的总数:

image_counts = [16, 2, 14]
total_images = sum(image_counts)
proportions = [1.0 * i / total_images for i in image_counts]
counts = [int( round( 15 * i)) for i in proportions]
counts[0] = 15 - sum(counts[1:])
于 2012-09-08T08:37:22.823 回答
0

除非每个集合中的图像数量和您想要的数量满足某些非常具体的条件,否则您通常不能让总数为 15(或任何您想要的)和正确的比例。

所以你需要决定如何调整这些数字以获得接近你想要的东西。您是否希望比例几乎正确(即使现在它也只是“几乎”,因为您已经四舍五入了)?或者您要允许总数不是 15 的数字?

还:

total_images = sum(image_counts)
于 2012-09-08T08:35:53.230 回答