Python:不能将值追加到While循环中的列表中

问题描述 投票:1回答:3

[我从图像中提取了一些值,现在我需要从图像中收集所有提取的项目,并将它们附加到列表中,最后返回它们。

我在做什么错?

def get_roles_text():
    start = [107, 338, 215, 21]
    while(True):
        im = pyautogui.screenshot(region=(start[0], start[1], start[2], start[3]))
        text = tess.image_to_string(cv2.cvtColor(np.array(im), cv2.COLOR_BGR2GRAY))
        all_roles = list()
        print(text)
        all_roles.append(text)
        print(text)
        start = [start[0], start[1] + start[3], start[2], start[3]]
        if text == '':
            print(all_roles)
            break
            return all_roles

    print(all_roles)
python list append
3个回答
3
投票

您在每次字符串迭代时都重新创建列表。在循环之前创建它。

def get_roles_text():
    all_roles = list()
    start = [107, 338, 215, 21]
    while(True):
        im = pyautogui.screenshot(region=(start[0], start[1], start[2], start[3]))
        text = tess.image_to_string(cv2.cvtColor(np.array(im), cv2.COLOR_BGR2GRAY))
        print(text)    
    ...

2
投票

您的问题是您要在循环的每次迭代中重置列表,应该在循环外部初始化列表。


0
投票

while循环外初始化列表:

def get_roles_text():
    start = [107, 338, 215, 21]
    all_roles = []
    while(True):
        im = pyautogui.screenshot(region=(start[0], start[1], start[2], start[3]))
        text = tess.image_to_string(cv2.cvtColor(np.array(im), cv2.COLOR_BGR2GRAY))
        print(text)
        all_roles.append(text)
        print(text)
        start = [start[0], start[1] + start[3], start[2], start[3]]
        if text == '':
            print(all_roles)
            break
            return all_roles

    print(all_roles)
© www.soinside.com 2019 - 2024. All rights reserved.