Python 如何通过另一个列表的值更改子列表的值

Python 如何通过另一个列表的值更改子列表的值,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,这就是我所拥有的: a = [['a0', '0'], ['a1', '1'], ['a2', '2']] b = ['b0', 'b1', 'b2'] 我想用b中的值替换a中每个子列表的所有第一个值。因此,这将是期望的输出: d = [['b0', '0'], ['b1', '1'], ['b2', '2']] 这是我的代码: def make_new_list(a,b): for sublist in a: for i in range(len(b)):

这就是我所拥有的:

a = [['a0', '0'], ['a1', '1'], ['a2', '2']]
b = ['b0', 'b1', 'b2']
我想用
b
中的值替换
a
中每个子列表的所有第一个值。因此,这将是期望的输出:

d = [['b0', '0'], ['b1', '1'], ['b2', '2']]
这是我的代码:

def make_new_list(a,b):    
    for sublist in a:
        for i in range(len(b)):
             sublist[0] = b[i]        
    return a
这是我通过这段代码得到的:

[['b2', '0'], ['b2', '1'], ['b2', '2']]
我做错了什么?我该如何修复它

[[b1, a1[1]] for a1, b1 in zip(a, b)]

试试看

代码的问题在于循环的构造方式。特别是对
a
中的每个子列表执行3次的内部列表。你不想那样。以下是脚本的固定版本:

a=[['a0','0'],['a1','1'],['a2','2']]
b=['b0','b1','b2']

def make_new_list(a,b):

    for i, sublist in enumerate(a):
        sublist[0] = b[i]
    return a

print(make_new_list(a, b))  # [['b0', '0'], ['b1', '1'], ['b2', '2']]
更具python风格的是:

a= [[x[0], x[1][1]] for i, x in enumerate(zip(b, a))]
print(a)  # [['b0', '0'], ['b1', '1'], ['b2', '2']]

您可以使用
zip
和如下列表:

>>> a=[['a0','0'],['a1','1'],['a2','2']]
>>> b=['b0','b1','b2']
>>> [[bl]+al[1:] for al, bl in zip(a,b)]
[['b0', '0'], ['b1', '1'], ['b2', '2']]
或者,使用
numpy
slice赋值:

>>> import numpy as np
>>> ar=np.array([['a0','0'],['a1','1'],['a2','2']])
>>> ar[:,0]=b
>>> ar
array([['b0', '0'],
       ['b1', '1'],
       ['b2', '2']], 
      dtype='|S2')

您可以在没有拉链的情况下尝试:

a = [['a0', '0'], ['a1', '1'], ['a2', '2']]
b = ['b0', 'b1', 'b2']

new_list = [[b[i], a[i][1]] for i in range(len(b))]

“你想要什么”不是合法的Python。@ScottHunter为什么不?@Ev.Kounis:不平衡括号;列表中的冒号。在解释器中键入。@ScottHunter我想这些都是打字错误。.内部容器是一个根据操作的列表
a = [['a0', '0'], ['a1', '1'], ['a2', '2']]
b = ['b0', 'b1', 'b2']

new_list = [[b[i], a[i][1]] for i in range(len(b))]