需要通过索引检索动态列表元素

2024-09-30 16:40:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用调制解调器,因此调制解调器发送的所有内容都会附加到我的列表中。你知道吗

我必须检索的东西已经在这个列表中了,但是如果我试图按索引打印它,它会返回一个错误,说列表没有这个元素。你知道吗

我知道为什么会发生错误,因为我的列表开始是空的,最后有7个元素。你知道吗

我试图创建一个新的辅助变量,但到目前为止没有任何进展。你知道吗

代码部分:

if (e == 'SBDRING'):  #change to format code

        print ('Ring Alert recebido')
        lido = True
        ser.write(str.encode('AT+SBDIX\r'))
        time.sleep(5)
        ser.write(str.encode('AT+SBDRT\r'))
        time.sleep(2)
        lista = []
        assistvar = 0
        while len(lista) < 10:
            u = ser.readline()
            i = u.rstrip()
            o = i.decode('utf-8')
            if len(o) > 1 :
                lista.append(o)
                assistvar = assistvar + 1
                print(lista)
                print('Lista size = ', len(lista))
                print('Assistvar = ', assistvar)

我知道事实上,我的信息将是我名单上的第二个最后的元素。这就是我需要分配给一个新变量的内容,这样我就可以用有问题的消息编程弹出窗口。你知道吗

上述代码的输出为:

Ring Alert recebido
['AT+SBDIX']
Lista size =  1
Assistvar =  1
['AT+SBDIX', '+SBDIX: 0, 196, 1, 126, 11, 5']
Lista size =  2
Assistvar =  2
['AT+SBDIX', '+SBDIX: 0, 196, 1, 126, 11, 5', 'OK']
Lista size =  3
Assistvar =  3
['AT+SBDIX', '+SBDIX: 0, 196, 1, 126, 11, 5', 'OK', 'AT+SBDRT']
Lista size =  4
Assistvar =  4
['AT+SBDIX', '+SBDIX: 0, 196, 1, 126, 11, 5', 'OK', 'AT+SBDRT', '+SBDRT:']
Lista size =  5
Assistvar =  5
['AT+SBDIX', '+SBDIX: 0, 196, 1, 126, 11, 5', 'OK', 'AT+SBDRT', '+SBDRT:', 'jupytertest']
Lista size =  6
Assistvar =  6
['AT+SBDIX', '+SBDIX: 0, 196, 1, 126, 11, 5', 'OK', 'AT+SBDRT', '+SBDRT:', 'jupytertest', 'OK']
Lista size =  7
Assistvar =  7

哪个是我必须找回的。你知道吗

将代码更改为:

print(lista)
                    if assistvar > 6:
                        print(lista[5])
                        break

我得到这个输出:

Ring Alert recebido
['AT+SBDIX']
['AT+SBDIX', '+SBDIX: 18, 198, 2, 0, 0, 0']
['AT+SBDIX', '+SBDIX: 18, 198, 2, 0, 0, 0', 'OK']

谢谢!你知道吗

@编辑: 在你的帮助下找到了办法呵呵。使用我的assistvar,我将循环放入循环中,读取循环中的第五个元素,以便将任何长度大于零的消息添加到列表中。我把它拿出来,现在我只能打印我的信息了!你知道吗

编辑我的代码:

                if len(o) > 1 :
                    lista.append(o)
                    assistvar = assistvar + 1
                    print(lista)
                if assistvar == 7:
                    print(lista[5])
                    break

Tags: 代码元素列表sizelenifokat
2条回答

据我所知,你的代码运行得很好。 https://repl.it/repls/AgitatedNextInverse

但是,如果您只是想查找倒数第二个元素,但在列表为空时遇到问题,请添加一个if case:

if len(lista)>=2:
    print(lista[-2])

但是声音列表当你的列表达到你需要的长度时,你就可以抓住它

if len(lista)==7:
    print(lista[6])

列表索引从0开始

示例

lista = ['AT+SBDIX', '+SBDIX: 0, 196, 1, 126, 11, 5', 'OK', 'AT+SBDRT', '+SBDRT:', 'jupytertest', 'OK']


for index in range(0,7):
    print (index, lista[index])

输出(索引,元素

0 AT+SBDIX
1 +SBDIX: 0, 196, 1, 126, 11, 5
2 OK
3 AT+SBDRT
4 +SBDRT:
5 jupytertest
6 OK

相关问题 更多 >