You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中能否在while语句内赋值实现matplotlib.ginput点收集需求

问题解答

核心结论

Python 3.8及以上版本支持在while语句中直接完成变量赋值,你需要使用**海象运算符(:=)**实现该逻辑,低于3.8的版本则需要拆分赋值和判断步骤。

原代码问题修正

你的原始代码存在几个明显问题:

  • 方法名调用错误,不存在plt.input()方法,你需要调用的是plt.ginput(1)获取点击坐标
  • plt.ginput(1)返回的是长度为1的坐标列表,需要取出第一个元素再做等值判断
  • 初始获取的第一个点没有加入存储列表,逻辑存在缺失

实现代码

3.8+ 海象运算符写法(符合你要的while内赋值需求)

import matplotlib.pyplot as plt

last_point = None
point_list = []

# 初始化空白画布
plt.plot()
plt.title("点击选点,连续两次点击相同位置结束")

# 直接在while条件中完成actual_point的赋值和判断
while (actual_point := plt.ginput(1)[0]) != last_point:
    point_list.append(actual_point)
    last_point = actual_point

plt.close()
print("采集到的坐标列表:", point_list)

低版本兼容写法

如果你的Python版本低于3.8不支持海象运算符,用常规拆分写法即可:

import matplotlib.pyplot as plt

last_point = None
point_list = []

plt.plot()
plt.title("点击选点,连续两次点击相同位置结束")

while True:
    actual_point = plt.ginput(1)[0]
    if actual_point == last_point:
        break
    point_list.append(actual_point)
    last_point = actual_point

plt.close()
print("采集到的坐标列表:", point_list)

补充说明

你也可以根据需求调整结束逻辑,比如设置点击右键直接结束选点,无需判断两次点击坐标是否一致。

内容的提问来源于stack exchange,提问作者Ulises Bussi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:54:04