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

时间:2019-04-18 18:01:06

标签: python list

我正在使用调制解调器,因此为调制解调器发送或由调制解调器发送的所有信息都将附加到我的列表中。

我必须检索的东西已经在此列表中,但是如果我尝试按索引打印它,则会返回错误消息,指出该列表没有该元素。

我知道为什么会发生错误,因为我的列表开始为空,并以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

我必须检索哪些'jupytertest'。

将代码更改为:

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']

谢谢!

@edit: 找到了一种在您的帮助下的方法。使用我的assistantvar,我将循环放入循环中读取第五个元素,以将长度大于零的任何消息添加到列表中。我把它取出来了,现在我只能打印我的消息了!

对我的代码的修改:

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

2 个答案:

答案 0 :(得分:1)

据我所知,您的代码工作正常。 https://repl.it/repls/AgitatedNextInverse

但是,如果您只是想查找倒数第二个元素,但是在列表为空时陷入困境,请添加if情况:

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

但是听起来列表,您可以在列表达到所需长度时捕获它

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

答案 1 :(得分:0)

列表索引从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
相关问题