繁体   English   中英

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

[英]How to change values of a sub-list by values of another list

这就是我所拥有的:

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

我想要的是,以取代在每个子列表的所有第一值a与中值b 因此,这将是所需的输出:

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)]
for i in range(0, 3):
    temp = a[i]
    d.append([b[i], temp[1]])

试试看

代码的问题是循环的构造方式。 内一个特定的,其中,用于在每个子列表执行3次a 你不希望出现这种情况。 以下是脚本的固定版本:

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

更多Pythonic将会是以下内容:

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

您可以尝试不使用zip的方法:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM