有人提问
https://www.zhihu.com/question/326694551
Python中给定一组数字和运算符,如何把数字按照给定的运算符计算出结果?
例如:
a = ['1', '2', '3', '4', '5', '6', '7']
b = ['+', '*', '*', '+', '-', '/']
需要计算:
1 + 2 * 3 * 4 + 5 - 6 / 7解决这样的问题,看起来复杂,如果学习过数据结构和算法,就可以利用栈数据结构的出栈来解决这个问题。
1、其实就是将list 模拟栈,左边作为栈顶,a 列表先出栈,b 列表后出栈,每一个字符串累加。
''''
黄哥Python培训 黄哥所写
Python 3
'''
a = ['1', '2', '3', '4', '5', '6', '7']
b = ['+', '*', '*', '+', '-', '/']
s = ''
while len(a) >0 and len(b) > 0 :
s += a.pop(0)
s += b.pop(0)
if len(a) > 0:
s += a.pop(0)
print(s)
print(eval(s))2、 上面的代码时间复杂度是O(n2)(n的平方),只要将a, b 现在O(n) 时间复杂度的情况下反转一下,就可以降低时间复杂度到O(n), list的pop方法,尾部pop时间复杂度为O(1), 首部pop(0) 是O(n).
3、代码修改如下
''''
黄哥Python培训 黄哥所写
Python 3
a = ['1', '2', '3', '4', '5', '6', '7']
b = ['+', '*', '*', '+', '-', '/']
需要计算:
1 + 2 * 3 * 4 + 5 - 6 / 7
'''
def reversal(lst):
i, j = 0, len(lst) - 1
while i < j:
lst[i], lst[j] = lst[j], lst[i]
i += 1
j -= 1
a = ['1', '2', '3', '4', '5', '6', '7']
b = ['+', '*', '*', '+', '-', '/']
reversal(a)
reversal(b)
s = ''
while len(a) >0 and len(b) > 0 :
# s += a.pop(0)
# s += b.pop(0)
s += a.pop()
s += b.pop()
if len(a) > 0:
s += a.pop()
print(s)
print(eval(s))最有价值的是:讲编程思路的视频、作业训练和答疑服务。
录制好的50讲视频+作业训练+qq答疑 效果等于面授。欢迎参加黄哥python远程视频培训,
帮你完成从不会写代码到会写代码解决问题的过渡。
咨询qq:1465376564
部分免费python免费视频
如何训练自己的编程思路