Python中%运算符条件判断用法及数据结构学习、栈元素校验问题
问题1:Python数据结构方向的技能要求
- 两类能力都必须掌握:
- 首先要熟练运用Python自带的所有数据结构:基础的list、dict、set,还有collections模块下的deque、defaultdict、Counter等,要清楚每种结构的时间复杂度、底层实现逻辑、适用场景,比如为什么deque做队列的插入弹出效率远高于list,dict的哈希冲突是怎么解决的这类底层知识也要搞懂,不能只会套API。
- 栈、队列、链表(单向/双向/循环)、树(二叉树、堆、前缀树等)、图(邻接表/邻接矩阵存储)这些基础数据结构,必须自己手动实现过至少一遍,配套的经典算法(比如图的BFS/DFS、树的三种遍历)也要能随手写出来。只有自己实现过才会清楚每种结构的优劣势,遇到实际业务场景才能选到最优的解决方案,而不是只会用内置结构硬凑。
问题2:判断整数元素再弹出的实现
你现在的代码有两个核心逻辑问题:
- 栈是后进先出结构,你每次pop的是栈顶元素,但你遍历的是原列表的元素做判断,弹出的元素和你判断的元素根本不是同一个,逻辑完全不匹配。
- 你现在用的
isdigit()只能判断字符串是不是纯数字组成,如果栈里有int、float等混合类型,这个方法就会失效。
修正后的可用代码如下:
class Stack(): def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() if not self.isEmpty() else None def peek(self): return self.items[-1] if not self.isEmpty() else None def size(self): return len(self.items) def show(self): return self.items # 混合类型测试用例 lt = ['a', '1', 2, 'b', 3, 4.5] a = Stack() for i in lt: a.push(i) # 临时栈用来暂存符合要求的整数元素 temp_stack = Stack() while not a.isEmpty(): current = a.pop() # 判断是否为整数类型,如果你需要把数字字符串也算作符合要求的整数,可以加对应的字符串判断分支 if isinstance(current, int): temp_stack.push(current) # 把临时栈的元素倒回原栈,恢复原有顺序 while not temp_stack.isEmpty(): a.push(temp_stack.pop()) print(a.show())
问题3:%运算符实现判断的解决方法
你写的if j!=%d是错误语法,%d是字符串格式化的占位符,不能直接用来做条件判断。如果要用%运算符判断整数,逻辑是:任意数值对1取余结果为0,就说明它是整数,字符串类型需要先转成数值再判断。
实现示例:
def is_integer(n): try: # 兼容字符串数字、int、float类型的判断 num = float(n) return num % 1 == 0 except (ValueError, TypeError): # 无法转成数值的类型直接判定为非整数 return False # 测试效果 print(is_integer('123')) # 输出True print(is_integer(45)) # 输出True print(is_integer(4.0)) # 输出True print(is_integer('abc')) # 输出False print(is_integer(4.5)) # 输出False
需要判断的时候直接用if not is_integer(待判断元素):执行弹出操作即可。
内容的提问来源于stack exchange,提问作者Walter White
相关产品推荐
相关产品推荐

