Python 将一维数组的元素插入到二维数组中的特定位置

Python 将一维数组的元素插入到二维数组中的特定位置,python,arrays,multidimensional-array,concatenation,nested-for-loop,Python,Arrays,Multidimensional Array,Concatenation,Nested For Loop,尝试使用insert()方法组合包含字符串的一维和二维列表/数组 然而,从1D列表中获取一个特定元素并将其放置在2D列表中的特定位置是Im卡住的地方 这里是目标的简化版本 #2D list/array list1= [['a1','b1'], ['a2','b2'] , ['a3','b3']] #1D list/array list2= ['c3','c2','c1'] #desired output list1= [['a1','b1','c1'], ['a2','b2','c2'] ,

尝试使用
insert()
方法组合包含字符串的一维和二维列表/数组

然而,从1D列表中获取一个特定元素并将其放置在2D列表中的特定位置是Im卡住的地方

这里是目标的简化版本

#2D list/array
list1= [['a1','b1'], ['a2','b2'] , ['a3','b3']]

#1D list/array
list2= ['c3','c2','c1']

#desired output
list1= [['a1','b1','c1'], ['a2','b2','c2'] , ['a3','b3','c3']]
下面是我试图尝试使用的脚本中的独立代码块

#loop through 1D list with a nested for-loop for 2D list and use insert() method.
#using reversed() method on list2 as this 1D array is in reverse order starting from "c3 -> c1"
#insert(2,c) is specifying insert "c" at index[2] location of inner array of List1

for c in reversed(list2):
    for letters in list1:
        letters.insert(2,c)

print(list1)
上述代码的输出

[['a1', 'b1', 'c3', 'c2', 'c1'], ['a2', 'b2', 'c3', 'c2', 'c1'], ['a3', 'b3', 'c3', 'c2', 'c1']] 
返回所需输出的最佳和最有效的方法是什么?我应该使用
append()
方法而不是
insert()
,还是应该在使用任何方法之前引入列表连接


如有任何见解,将不胜感激

如评论中所述,您可以通过使用
enumerate
zip
进行列表理解来实现这一点。您可以使用
枚举
列表1
中获取索引和子列表,使用
索引
列表2
中选择适当的值以附加到每个子列表:

list1 = [l1 + [list2[-i-1]] for i, l1 in enumerate(list1)]
或者您可以将
zip
list1
和反向的
list2
放在一起:

list1 = [l1 + [l2] for l1, l2 in zip(list1, list2[::-1])]
或者,您可以使用一个简单的
for
循环就地修改
列表1

for i in range(len(list1)):
    list1[i].append(list2[-i-1])
对于所有这些,输出为:

[['a1', 'b1', 'c1'], ['a2', 'b2', 'c2'], ['a3', 'b3', 'c3']]

一种简单而有效的方法是在外部for循环中使用“枚举”(并删除内部for循环)。它允许接收与项目并行的索引。您可以使用“list1”上的这个索引来访问和修改相应的子列表。更难理解的是使用“zip”来直接并行使用“list2”中的子列表和项。我是否首先将此函数应用于1D数组列表2?我会阅读更多关于内置zip()函数的内容,实际上只针对(反转的)“list2”。好的,我尝试过你的建议,删除内部for循环,并将外部for循环中的枚举函数应用于反转的list2<代码>用于枚举中的c(反转(列表2)):打印(列表(c))我收到的输出是
[(0,'c1'),(1,'c2'),(2,'c3')]
,这很好。现在,我对如何使用这些索引访问和修改列表1中的子列表感到困惑。嘿,你好@Nick,感谢您的回复,以及如何解决这个问题的多种变体。我将仔细研究并应用每一个,以了解引擎盖下正在发生的事情。但是,对于第一个和第三个解决方案的列表2的索引
[-i-1]
,我确实有一个问题。该指数表示“负指数1处的负i”还是“负i减1”?@HWFord16为负(i+1),即负i减1。由于正索引从0开始,而负索引(从列表末尾向后读取)从-1开始,因此需要从负的正索引中减去1以获得相应的负索引。我认为这是有意义的。好的,最后一个问题。函数
范围内的函数(len(list1))
怎么不抛出“TypeError”?我问这个问题的原因是,在我发布这个问题之前,我试图将这些函数单独用于
list1
,错误是“int object is not iterable”或“list cannot expression as integer”。当以这种方式使用这些内置函数时,这是如何避免错误的?我对这一点的理解是,“对于介于0和list1长度之间的“i”,为循环迭代“i”提供了一个整数范围。这是对的吗?@HWFord16完全正确
len(list1)
返回一个整数,
list1
的长度,然后
range
返回一个从0到
len(list)-1的计数序列,
i
然后依次取该序列的每个值,0,1,…,len(list)-1