如何统计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
相关产品推荐
相关产品推荐

