无言、XZ 发表于 2023-11-18 13:24:50

Python问题,为什么得不到结果

nums =
nums.sort()

major = nums
count = 0
A = 0
B = 0

for each in nums:
    if major == each:
        # 到这一步后为什么进不到if语句块里。
      if nums.count(major) / len(nums) > 3.0:
            A = each
            print(A)
      else:
            B = A
    else:
      major = each

print(A,B)

Mike_python小 发表于 2023-11-18 13:24:51

在你提供的代码中,存在一个逻辑错误导致无法进入 if 语句块。问题出在条件判断上,if nums.count(major) / len(nums) > 3.0: 这个条件是不太符合预期的。

我理解你想要判断 major 在 nums 中出现的比例是否大于 30%,如果是的话,将 major 赋给变量 A 并打印出来。但是你的判断条件写成了 if nums.count(major) / len(nums) > 3.0:,这个条件的意思是判断 major 在 nums 中出现的次数除以 nums 的长度是否大于 3.0。显然这不是你的本意。

以下是修正后的代码:


nums =
nums.sort()
major = nums
count = 0
A = 0
B = 0

for each in nums:
    if major == each:
      count += 1
      if count / len(nums) > 0.3:# 判断 major 在 nums 中出现的比例是否大于 30%
            A = each
            print(A)
    else:
      major = each

B = A
print(A, B)


修正后的代码中,我修改了条件判断为 if count / len(nums) > 0.3:,这样才能正确地判断 major 在 nums 中出现的比例是否大于 30%。希望这样可以解决你的问题。如果还有其他问题,请随时提问。

isdkz 发表于 2023-11-18 13:30:02

问题出在nums.count(major) / len(nums) > 3.0这个条件判断上。在这个条件判断中, nums.count(major)返回的是major在nums中出现的次数,而len(nums)返回的是nums的长度。因此, nums.count(major) / len(nums)得到的结果是major在nums中出现的频率。因为major的值是nums中的一个元素,所以它在nums中出现的频率最大也只能是 1.0。所以条件判断nums.count(major) / len(nums) > 3.0永远不会成立,导致无法进入if语句块。

如果你想要判断某个元素在nums中出现的次数是否大于 3,你可以使用collections.Counter来统计每个元素出现的次数,然后再进行判断。例如:

from collections import Counter

nums =
counter = Counter(nums)

for num, count in counter.items():
    if count > 3:
      print(num)


这样就可以得到在nums中出现次数大于 3 的元素了。
页: [1]
查看完整版本: Python问题,为什么得不到结果