傅彧 发表于 2021-8-5 10:36:29

21讲课后题求助

求助两个问题,谢谢!
问题1
>>> count = nums.count(1)
>>> length = len(nums)
>>> for each in range(length):
...   if nums == 1:
...         count -= 1
...   if count == 0:
...         print(each)
...         break
...
代码中的 if nums == 1:
...         count -= 1
...   if count == 0:
...         print(each) 是什么意思啊?


问题2
nums =
   
nums.sort()
length = len(nums)
half = nums
count = 0
   
for each in nums:
    if each == half:
      count += 1
if count > length / 2:
    print("存在主要元素,是:", half)
else:
    print("不存在主要元素!")

中的half = nums是什么意思?
中的for each in nums:
    if each == half:
      count += 1 是什么意思?

非常感谢!

Hoiste 发表于 2021-8-5 11:00:11

问题1:
通过for循环遍历列表nums的每一个元素,nums == 1代表列表里如果存在1这个元素,就把变量count置0,并在下一个条件语句中打印each,也就是元素1的索引值。并且只要找到元素1就直接退出循环。

问题2:
half = nums表示列表nums中索引值为列表长度地板除以2的数字所在的元素,因为主要元素占比必然超过列表的一半,列表经过sort方法排序后该位置的元素如果与前面所有元素都是相同的,那么这个元素就是主要元素。
根据这个思路,下面那个循环语句作用就是将列表前面每一个元素与中间位置元素作比较,如果相等,count+1,如果最终count值达到列表长度一半以上,就代表这个元素在列表中超过一半。

综合两个问题,基本上就是在列表索引上概念还是模糊,这个不难弄明白,但是如果不能搞清楚的话后面代码长了会很吃力。

大马强 发表于 2021-8-5 11:09:07

if nums == 1:
...         count -= 1
...   if count == 0:
...         print(each) 是什么意思啊?
找到 数字 1在这列表出现的最后一个位置
第二个是找出主要元素,我猜主要元素是应该是占该列表数字过半的元素,
它前边先排了个队,要是有主要元素,那么,此时它应该在列表中间位置,即从0开始到中间都是它,下面每次找到该元素count就加一,当count大于这个列表长度一半时,这个元素就是主要元素

傅彧 发表于 2021-8-5 11:25:23

非常感谢 每一个回答问题的{:7_123:}
页: [1]
查看完整版本: 21讲课后题求助