Python二维数组按列降序排序及字母统计代码求助
问题1:按指定列对二维数组降序排序
要实现按第二行数值降序排列二维数组,可通过配对元素与对应数值→排序→拆分回原结构的步骤完成:
# 原始二维数组 arr = [ ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'], [1, 3, 5, 7, 8, 1, 2, 2] ] # 1. 将元素与对应数值配对,形成元组列表 pairs = list(zip(arr[0], arr[1])) # 2. 按数值降序排序(以元组第二个元素为关键字) sorted_pairs = sorted(pairs, key=lambda x: x[1], reverse=True) # 3. 拆分排序后的元组,还原为二维数组结构 sorted_arr = [list(row) for row in zip(*sorted_pairs)] print(sorted_arr[0]) # 输出: ['E', 'D', 'C', 'B', 'G', 'H', 'A', 'F'] print(sorted_arr[1]) # 输出: [8, 7, 5, 3, 2, 2, 1, 1]
问题2:优化字母出现次数统计代码
你的代码能实现基本统计,但存在效率冗余、逻辑不严谨的问题,以下是两种改进方案:
方案1:优化原有逻辑
解决重复扫描字符串、冗余存储、空格判断不严谨的问题:
s = input().upper() # 去重并过滤空格,同时保持字母顺序 unique_chars = [c for c in sorted(set(s)) if c != ' '] # 一次性生成计数列表 counts = [s.count(char) for char in unique_chars] # 组合为目标结构 kitu = [unique_chars, counts] # 验证输出 for char, cnt in zip(kitu[0], kitu[1]): print(f"{char}: {cnt}")
方案2:使用collections.Counter(更高效简洁)
Python标准库的Counter专为元素计数设计,无需手动遍历扫描:
from collections import Counter s = input().upper() # 统计所有非空格字符的出现次数 char_counter = Counter(c for c in s if c != ' ') # 按字母顺序排序统计结果 sorted_result = sorted(char_counter.items()) # 转换为你需要的二维列表格式 kitu = [[item[0] for item in sorted_result], [item[1] for item in sorted_result]] # 验证输出 for char, cnt in zip(kitu[0], kitu[1]): print(f"{char}: {cnt}")
内容的提问来源于stack exchange,提问作者Trung The Shrimp
相关产品推荐
相关产品推荐

