0.请问 == 运算符和 is 运算符有什么区别呢?
答:== 是用于判断两个变量是否相等 is 是判断两个变量是否为同一对象
1.>>> [[1, 2, 3], [4, 5, 6]] + [7, 8, 9]
[[1, 2, 3], [4, 5, 6], 7, 8, 9]
2.>>> len([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
3
3.请问下面代码的结果是返回 True 还是 False 呢
a = 250
b = 250
a is b
Ture
a = 1000
b = 1000
a is b
False
如果超过了 -5~256 这个范围,则Python会单独开辟两块不同的内存区域。
5.既然有二维列表,那么三维列表应该也是“同理可得”的东西,请大家尝试创建一个简单的三维列表吧?
three = [[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
... [[1, 1, 1], [1, 1, 1], [1, 1, 1]],
... [[2, 2, 2], [2, 2, 2], [2, 2, 2]]]
动动手:
-
请根据下面的内存关系图,分别创建出 x、y 和 z 三个不同的列表。
x = [[0] * 3] * 3
y = [0] * 3
for i in range(3):
y[i] = [0] * 3
z = [0] * 3
for i in range(3):
z[i] = [0] * 3
for j in range(3):
z[i][j] = [0] * 2
- 上一节的课后作业我们提到了“摩尔投票法”,这种方法尤其适用于在任意多的选项中找到数量占比最多的那一个。那么这一次我们修改一下要求,编写代码,利用“摩尔投票法”来找出占比数量最多的两个元素(注意:这两个元素的数量都需要超过总数的三分之一)。
摩尔投票法的工作原理想象为诸侯争霸,假设每个国家都是全民皆兵,并且打起仗来都是以 1 换 1 的形式消耗人口,当一个国家人口总数为 0,那么 Gameover,OK,如果某国人口数量超过所有国家总人口的一半,最终赢家就肯定是它。
摩尔投票法分为两个阶段:
对抗阶段:分属两个候选人的票数进行两两对抗抵消
计数阶段:计算对抗结果中最后留下的候选人票数是否有效
nums = [1, 1, 2, 1, 3, 2, 3, 2]
major1 = major2 = nums[0]
count1 = count2 = 0
# 对抗阶段
for each in nums:
if major1 == each:
count1 += 1
continue
if major2 == each:
count2 += 1
continue
if count1 == 0:
major1 = each
count1 = 1
continue
if count2 == 0:
major2 = each
count2 = 1
continue
count1 -= 1
count2 -= 1
# 统计阶段
if nums.count(major1) > len(nums) / 3:
print(major1)
if nums.count(major2) > len(nums) / 3:
print(major2)