鱼C论坛

 找回密码
 立即注册
楼主: 11063216906

[已解决]浮点数存取问题

[复制链接]
 楼主| 发表于 5 天前 | 显示全部楼层
FishC 发表于 2026-6-20 11:20
确实不是这样。让我用通俗的方式帮你理清浮点数的实际存储机制。

首先,float 类型在内存中占用固定的32 ...

我现在在python有个问题
如果我的列表a = [1,66] b = [66,1]
我想要a b中元素都不相同的时候打印none
  1. for c in a:
  2.     for d in b:
  3.         if c == d:
  4.             print(c)
  5.             break

  6. else:
  7.     print('none')
  8.         
复制代码

但你会非常尴尬的发现 因为66一个在列表头 一个在尾巴 所以break不会影响else的执行与否 每次都是恰好完成循环导致none都会被打印 我有什么简洁高效的办法控制这个吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
11063216906 发表于 2026-10-05 22:52
FishC 发表于 2026-6-20 11:20
确实不是这样。让我用 ...


你的问题在于:break 只跳出内层循环,外层 for 没有被中断,所以外层循环总是正常结束,else 就必然执行。

要控制它,找到相同元素后让外层也 break 即可。最简单是用 in 判断,省掉内层循环:


  1. a = [66, 2, 3]
  2. b = [1, 2, 66]

  3. for c in a:
  4.     if c in b:
  5.         print(c)
  6.         break
  7. else:
  8.     print('none')
复制代码


如果 b 很大,先把 b 转成集合,查找更快:


  1. b_set = set(b)
  2. for c in a:
  3.     if c in b_set:
  4.         print(c)
  5.         break
  6. else:
  7.     print('none')
复制代码


如果你想打印所有共同元素,没有则打印 none,最简洁的是用集合交集:


  1. common = set(a) & set(b)
  2. if common:
  3.     for x in common:
  4.         print(x)
  5. else:
  6.     print('none')
复制代码


注意:集合会去重且不保证顺序。如果元素有重复且需要保持顺序,可以用 seen 集合辅助判断。

你原来的双重循环也可以加一个 found 标志,找到后外层也 break,但不如上面的写法简洁。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-10-10 23:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表