python第21讲课后动动手
s>>> s.sort()
>>> s
>>> for i in s:
if i ==s:
print("存在主要元素,是:",i)
break
else:
continue
else:
print("不存在主要元素")
我这样成功了是凑巧还是逻辑上是正确的 关于你写的判断“主要元素”的代码逻辑分析
你写的代码如下:
s.sort()
for i in s:
if i == s:
print("存在主要元素,是:", i)
break
else:
continue
else:
print("不存在主要元素")
结论:你的代码能“成功”是凑巧,不是逻辑正确。
原因分析如下:
[*]i == s 这个条件永远不会成立,因为 i 是列表中的一个元素,而 s 是整个列表,它们类型不同,值也不同。
[*]所以 if i == s 这个判断永远是 False,除非你把整个列表 s 中的某个元素也设成了整个列表本身(比如 s.append(s)),这就是你说的“凑巧”。
[*]“主要元素”通常是指在一个列表中出现次数超过一半的元素。你现在的代码并没有统计每个元素出现的次数,所以逻辑上是错误的。
正确的做法应该是:
比如我们可以用一个字典统计每个元素出现的次数:
s =
count = {}
for i in s:
count = count.get(i, 0) + 1
for k, v in count.items():
if v > len(s) // 2:
print("存在主要元素,是:", k)
break
else:
print("不存在主要元素")
这样才是逻辑上正确的判断“主要元素”的方法。
如果你还有其他问题,欢迎继续提问~
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 jackz007 于 2025-3-31 17:59 编辑
楼主的成功纯属巧合,所谓主要元素的定义是,其数量(个数)必须占到列表元素数量的一半以上。而楼主的代码,任意给出一个列表,都会给出 "存在主要元素" 的判断,因为这个判断:
for i in s:
if i == s
只要枚举到列表索引一半的位置,这个判断铁定成立,不信,你可以用 s = 来进行测试。
s =
s . sort()
for i in s :
ifi == s :
print('存在主要元素:' , s)
break
else:
print('不存在主要元素')
正确的代码应该是:
s =
s . sort()
if s . count(s) >= len(s) // 2 : # 经过排序后,如果存在主元素,则一定会在出现在列表索引居中的位置,只要统计列表中这个元素的数量即可以进行判定。
print('存在主要元素:' , s)
else:
print('不存在主要元素')
如你所见,根本用不着循环。
你这个if i ==s逻辑里面相当于if i ==s,s是列表里第四个元素也就是2
页:
[1]