![](/img/trans.png)
[英]Finding if the values in one list, are found between values of another sub-list
[英]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.