gpt4 book ai didi

python - 将列表中的整数排序到 bin 中

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:17 25 4
gpt4 key购买 nike

我有一个名为鞋码和数量的整数列表。鞋码列表中的整数就像在数量列表中具有数量(在同一索引中)的箱子。我想重新组织列表,使鞋码按升序排列,每个鞋码的所有数量加在一起。

shoesizes    = [ 2 ,  5 ,  6 , 1 , 3 , 2 ,  4 ,  5 , 2 , 3 , 1 ]    
quantities = [ 50, 100, 120, 20, 40, 10, 90 , 10 ,30 , 20, 80]

所以期望的输出将是:

orderedsizes = [ 1 , 2 , 3 , 4 , 5 ,  6 ]
totalquant = [100, 90, 60, 90,110, 120]

最佳答案

因为无论如何你都需要排序,itertools.groupby can be used to do this pretty nicely :

from operator import itemgetter
from itertools import groupby

shoesizes = [ 2 , 5 , 6 , 1 , 3 , 2 , 4 , 5 , 2 , 3 , 1 ]
quantities = [ 50, 100, 120, 20, 40, 10, 90 , 10 ,30 , 20, 80]

# For convenience, short names for itemgetters
getsize, getcnt = itemgetter(0), itemgetter(1)

# Sort to bins of same size next to each other
sorted_bins = sorted(zip(shoesizes, quantities), key=getsize)

# Group and sum bins of same size
summed_sizes = [(k, sum(map(getcnt, g))) for k, g in groupby(sorted_bins, key=getsize)]

# Convert back to separate lists
orderedsizes, totalquant = map(list, zip(*summed_sizes))

print(orderedsizes)
print(totalquant)

哪些输出:

[1, 2, 3, 4, 5, 6]
[100, 90, 60, 90, 110, 120]

也可以用 collections.Counter 来做到这一点(或者只是 collections.defaultdict(int)),然后对 Counter.items() 进行排序;除非 bins 的数量很大,否则性能差异不太重要;如果您一开始就不想排序,Counter 完全避免排序会更有意义。示例代码:

from collections import defaultdict

size_counts = defaultdict(int)
for size, cnt in zip(shoesizes, quantities):
size_counts[size] += cnt

orderedsizes, totalquant = map(list, zip(*sorted(size_counts.items())))

关于python - 将列表中的整数排序到 bin 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34937570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com