You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计1-49分组下整数列表元素所属的不同分组数量?

统计列表元素所属不同分组的数量

嘿,这个问题其实挺直观的,咱们一步步来拆解:

首先先明确你的分组逻辑:你用zip(*[iter(oneto49numbers)]*7)生成的grouped,本质是把1-49按每7个一组分成了7个元组——grouped[0]对应1-7,grouped[1]对应8-14,grouped[2]对应15-21,以此类推直到grouped[6]对应43-49。

高效解法:直接计算分组索引

其实不用真的去遍历grouped匹配元素,咱们可以通过简单的算术计算直接得到每个元素对应的分组索引:对任意数字num,它的分组索引是(num - 1) // 7。这个公式的逻辑很简单:把数字减1后,每7个为一组做整除,正好对应grouped的索引(比如18:(18-1)//7=2,对应grouped[2];43:(43-1)//7=6,对应grouped[6],和你手动统计的完全一致)。

有了分组索引,统计不同分组的数量就很简单了——用集合自动去重,再取集合的长度就行:

alist = [18,5,22,6,38,43]
# 计算每个元素对应的分组索引
group_indices = [(num - 1) // 7 for num in alist]
# 转成集合去重后,获取长度就是不同分组的数量
unique_group_count = len(set(group_indices))
print(unique_group_count)  # 输出:5

用原有grouped匹配的解法(适合理解逻辑)

如果你想基于已有的grouped变量来实现匹配,也可以通过嵌套循环找到每个元素所属的分组索引,再用集合去重:

oneto49numbers = list(range(1, 50))
grouped = list(zip(*[iter(oneto49numbers)]*7))
alist = [18,5,22,6,38,43]

unique_group_indices = set()
for num in alist:
    for idx, group in enumerate(grouped):
        if num in group:
            unique_group_indices.add(idx)
            break  # 找到所属分组就退出内层循环,提升效率

print(len(unique_group_indices))  # 同样输出:5

不过要注意,第一种计算索引的方法效率更高(时间复杂度O(n)),第二种因为要遍历分组匹配,时间复杂度是O(n*m)(n是alist长度,m是分组数),当数据量较大时差异会很明显。

内容的提问来源于stack exchange,提问作者Ferit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:16:34