Python技术求助:完善裤装尺码销量统计函数的计数功能
解决方法
你已经成功拿到了所有唯一尺码,接下来只需要为每个唯一尺码统计它在原列表中的出现次数,再把尺码+次数依次存入结果列表即可。下面提供几种实现思路:
方法1:基于你现有代码的快速改进
直接利用列表的count()方法,对每个唯一尺码统计出现次数:
def tally(sizes: list) -> list: unique = [] for i in sizes: if i not in unique: unique.append(i) # 构建结果列表 result = [] for size in unique: result.append(size) result.append(sizes.count(size)) return result # 测试 a = [30, 34, 30, 20, 34] print(tally(a)) # 输出: [30, 2, 34, 2, 20, 1]
方法2:用字典统计(更高效)
如果输入列表很大,count()方法会重复遍历列表导致效率偏低。可以用字典先一次性统计所有尺码的销量,再转换为目标格式:
def tally(sizes: list) -> list: count_dict = {} for size in sizes: # 若尺码已在字典中则计数+1,否则初始化为1 count_dict[size] = count_dict.get(size, 0) + 1 # 展开字典的键值对为列表 result = [] for size, count in count_dict.items(): result.append(size) result.append(count) return result # 测试 a = [30, 34, 30, 20, 34] print(tally(a)) # 输出: [30, 2, 34, 2, 20, 1]
注:Python 3.7+的字典会保留插入顺序,所以结果里的尺码顺序和原列表中首次出现的顺序一致,符合示例要求。
方法3:用collections.defaultdict简化统计
如果允许使用标准库,collections.defaultdict可以让字典统计的代码更简洁:
from collections import defaultdict def tally(sizes: list) -> list: count_dict = defaultdict(int) for size in sizes: count_dict[size] += 1 # 展开为结果列表 result = [] for size, count in count_dict.items(): result.extend([size, count]) return result
内容的提问来源于stack exchange,提问作者Underleague
相关产品推荐
相关产品推荐

