In [1]: a = [i for i in range(100) if i % 2 == 1]
In [2]: a
Out[2]:
[1,
3,
5,
...
95,
97,
99]
In [3]: sum(a)
Out[3]: 2500
In [4]: sum(a[::2]) - sum(a[1::2])
Out[4]: -50
In [5]: 2500 * (-50)
Out[5]: -125000
参考https://blog.csdn.net/qq_33243189/article/details/80222629
本题主要考察二叉树的前中后序的推导, 前序的规则是根->左节点->右节点
, 中序的规则是:左节点->根节点->右节点
, 后序的规则是:左节点->右节点-根节点
推算逻辑如下:
第一步:
前序第一个是A,说明A是根节点
中序中A后面只有一个B, 说明B是A的右节点
A
B
第二步:
前序第二个是D, 说明D是A的左节点
中序第一个是C, 说明C是左节点且后面没有左节点, 第二个是D, 说明C应该是D的左节点,这里初始验证下: 前序应该是ADCB, 中序应该是CDAB, 是符合要求的
A
D B
C
第三步:
前序中的第四个是E, 后面是FG,而在中序中E前是F, 所以E是D的右节点,F是E的左节点,G是E的右节点, ,
A
D B
C E
F G
这里再次验证:前序应该是ADCEFGB 中序应该是:CDFEGAB 也是符合要求的
第四步:
最后只剩下H了, 前序和中序中,H都在G后面, H应该是G的右节点,
A
D B
C E
F G
H
所以根据后序的读取规则, CFHGEDBA
纯个人意见,若有考虑不周的地方,敬请指出, 相互进步.
这题考察的应该是二进制相加运算以及十进制与二进制的转换,
In [1]: list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
In [2]: list2 = [9, 8, 7, 21, 13, 5, 2, 0]
In [3]: sum(set(list1[-7:-2] + list2))
Out[3]: 78
In [1]: def g(n):
...: for i in range(2, n):
...: if n % i == 0:
...: return False
...: return True
...:
# 这个函数是用来判断一个数字是否是素数的
In [3]: sum([x for x in range(1, 30) if g(x)])
Out[3]: 130
In [4]: [x for x in range(1, 30) if g(n)]
Out[4]: [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
x = {'val': 1}
y = {'val': 2}
z = {'val': 3}
def f(obj1, obj2):
obj1 = {'val': 3}
obj2['val'] = 4
z = {'val': obj1['val'] + obj2['val']}
f(x, y)
print(x['val']) # 1
print(y['val']) # 4
print(z['val']) # 3
In [1]: import copy
In [2]: a = [1, 2, 3, 4, 5, ['a', 'b', 'c']]
In [3]: b = a
In [4]: c = copy.copy(a)
In [5]: d = copy.deepcopy(a)
In [6]: a.append(5)
In [7]: a[5].append('d')
In [8]: b # b 这一步容易理解,其实就是对象的引用(别名)
Out[8]: [1, 2, 3, 4, 5, ['a', 'b', 'c', 'd'], 5]
In [9]: c # c只拷贝父对象,不会拷贝对象的内部的子对象
Out[9]: [1, 2, 3, 4, 5, ['a', 'b', 'c', 'd']]
In [10]: d # d 这一步也容易理解,完全拷贝了父对象及其子对象
Out[10]: [1, 2, 3, 4, 5, ['a', 'b', 'c']]
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
Child1.x = 2
print(Parent.x, Child1.x, Child2.x) # 1 2 1
Parent.x = 3
print(Parent.x, Child1.x, Child2.x) # 3 2 3