为什么我不能通过依次分配每个元素来构建列表?如何添加(附加)元素而不出现 IndexError?
- 2024-11-29 08:42:00
- admin 原创
- 114
问题描述:
我尝试编写一些如下代码:
i = [1, 2, 3, 5, 8, 13]
j = []
k = 0
for l in i:
j[k] = l
k += 1
但我收到一条错误消息IndexError: list assignment index out of range
,指出j[k] = l
代码行。为什么会出现这种情况?我该如何修复它?
解决方案 1:
j
是一个空列表,但您试图[0]
在第一次迭代中写入尚不存在的元素。
请尝试执行以下操作,将新元素添加到列表末尾:
for l in i:
j.append(l)
当然,如果您只想复制现有列表,那么您实际上永远不会这样做。您只需执行以下操作:
j = list(i)
或者,如果您想像使用其他语言中的数组一样使用 Python 列表,那么您可以预先创建一个列表,并将其元素设置为空值(None
在下面的示例中),然后在特定位置覆盖该值:
i = [1, 2, 3, 5, 8, 13]
j = [None] * len(i)
#j == [None, None, None, None, None, None]
k = 0
for l in i:
j[k] = l
k += 1
需要意识到的是,list
对象不会允许您为不存在的索引分配值。
解决方案 2:
您的另一个选择是初始化j
:
j = [None] * len(i)
解决方案 3:
代替j.append(l)
并完全j[k] = l
避免。k
解决方案 4:
您还可以使用列表推导:
j = [l for l in i]
或者使用以下语句复制它:
j = i[:]
解决方案 5:
j.append(l)
还要避免使用小写的“L”,因为它们很容易与 1 混淆
解决方案 6:
我认为 Python 方法插入就是您要找的:
在位置 i 处插入元素 x。list.insert(i,x)
array = [1,2,3,4,5]
# array.insert(index, element)
array.insert(1,20)
print(array)
# prints [1,20,2,3,4,5]
解决方案 7:
你可以使用字典(类似于关联数组)来表示 j
i = [1, 2, 3, 5, 8, 13]
j = {} #initiate as dictionary
k = 0
for l in i:
j[k] = l
k += 1
print(j)
将打印:
{0: 1, 1: 2, 2: 3, 3: 5, 4: 8, 5: 13}
解决方案 8:
还有一种方法:
j=i[0]
for k in range(1,len(i)):
j = numpy.vstack([j,i[k]])
在这种情况下j
将是一个 numpy 数组
解决方案 9:
也许你需要extend()
i=[1,3,5,7]
j=[]
j.extend(i)
解决方案 10:
显然,该append
方法应该用于提高可读性。可能不推荐,我想指出的是,附加也适用于切片或列表连接。j[k] = l
用以下可能性之一替换 ,也可以解决您的问题:
j[k:] = [l]
j[k:] = l,
j += l,
我还想提一下,附加功能j[k] = l
也可以在其他语言中使用,例如 javascript。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD