在列表中写一个数字,IndexError:列表赋值索引超出范围

时间:2017-08-23 12:48:11

标签: python python-2.7 ip

我想在列表中写一个数字,但这个数字来自一个变量。实际上,我正在阅读数据包,我正在收回IP地址。我的列表首先填充为0,当我得到一个IP地址时,我会将IP地址的结尾放在正确的情况下为1.并且我想计算列表中的1的数量。 例如(我不知道IP地址):

Mydico=[]
for i in range(len(Mydico)):
    Mydico[i]=0
IP_address = '192.168.1.25'
nber=IP_address.split('.')[-1]# I got 25 in the variable nbre
Mydico[int(nber)]=1
print Mydico.count(1)

我收到以下错误: Mydico [int(nber)] = 1 IndexError:列表分配索引超出范围

编辑:我做了很多更改,因为我误认了字典和列表

3 个答案:

答案 0 :(得分:1)

IP_adress是一个字符串,因为你可以在它上面使用split。但是,如果要索引列表,则必须提供一个数字。所以你需要将它转换为整数

List[int(nbre)]=1

通常使用名称List(即使它比内置的list更好)作为变量并不是一个好的做法。

修改 由于OP改变了他的帖子使得出现MyList,我将添加一些信息。

首先Mylist = {}创建一个不是列表的字典。如果你想使用字典,你可以使用字符串作为键,而不是真的需要转换为int。如果您不知道什么是词典,我会让您阅读section 5.5

如果您需要初始化空列表,则必须执行Mylist = []。如果要将项目添加到列表,则必须执行Mylist.append(foo)。但是,如果您这样做,您将一次添加一个数字。

答案 1 :(得分:0)

不是100%肯定你想要实现的目标,但是:

IP_address = 192.168.1.25会出现语法错误。

.split('。')是一个在字符串上调用的函数。

所以应该是这样的:

IP_address = '192.168.1.25' nbre=IP_address.split('.')[-1] nbre '25'

List是代码中的变量吗?

答案 2 :(得分:0)

在您的代码中

Mydico=[]
for i in range(len(Mydico)):
    Mydico[i]=0

len(mydico)将为零。所以你的Mydico仍然是[]。

IP_address = '192.168.1.25'
nber=IP_address.split('.')[-1]# I got 25 in the variable nbre
Mydico[int(nber)]=1

int(nber)是25.你不能改变mydico [25],因为你没有那么长的列表。