|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
x = [2, 2, 4, 2, 3, 6, 2, 4, 4 ,4]
x2 = x[:]
j = x[0]
count = 0
for i in x:
if count == 0:
j = i
if i == j:
count += 1
else:
count -= 1
if x.count(j) > len(x) / 3:
print('主要元素为:',j)
else:
print('没有主要元素')
while x2.count(j):
x2.remove(j)
w = x2[0]
for u in x2:
if count == 0:
w = u
if u == w:
count += 1
else:
count -= 1
if x2.count(w) > len(x) / 3:
print('主要元素为:',w)
else:
print('没有主要元素')
上面是我写的,第一个主要元素出现之后,在拷贝列表中将第一个主要元素删除,然后再查第二个主要元素,这是我的思路。
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)
这是小甲鱼写的,因为一开始就赋值了major1 = major2 = nums[0],那为什么当循环到第一个2的时候,major2会变成了each=2了呢?
不是应该直接 count1 -= 1 count2 -= 1 ,然后执行下一轮循环吗?
这是小甲鱼写的,因为一开始就赋值了major1 = major2 = nums[0],那为什么当循环到第一个2的时候,major2会变成了each=2了呢?
因为甲鱼哥的列表是 nums = [1, 1, 2, 1, 3, 2, 3, 2] 有两个 1,在循环到 第一个 2 时,count1 = 2,count2 = 0
又因为此时 major1、major2 均为 1,都不等于 2,且此时 count1 = 2, count2 = 0,则最后一个 if 条件成立,前三 if 条件均不成立,执行最后一个 if 代码块,导致 major2 = each = 2
|
|