如何替换嵌套列表python 3中的元素?

时间:2019-06-17 03:27:06

标签: python

如何在特定位置替换嵌套列表python 3中的元素?我想在a[1]位置插入元素。插入的元素在列表b中。

a = [['04\01\1997','alphanum4569874','22','4.0'],['07\01\1997','Anee_69213654','23','2.0']]

b = ['alphanum1','alphanum2']

for idx,item in enumerate(b):
    for i in b:
        a[1].append(i)

print(a)

预期输出:

[['04\01\1997','alphanum1','22','4.0'['07\01\1997','alphanum1','23','2.0']]

当前输出:

[['04\x01\x01997', 'alphanum4569874', '22', '4.0'], ['07\x01\x01997', 'Anee_69213654', '23', '2.0', 'alphanum1', 'alphanum2', 'alphanum1', 'alphanum2']]

5 个答案:

答案 0 :(得分:2)

您可以使用zip

a = [['04\01\1997','alphanum4569874','22','4.0'],['07\01\1997','Anee_69213654','23','2.0']]
b = ['alphanum1','alphanum2']
result = [[c, d, *j] for d, [c, _, *j] in zip(b, a)]

输出:

[['04\x01\x01997', 'alphanum1', '22', '4.0'], ['07\x01\x01997', 'alphanum2', '23', '2.0']]

答案 1 :(得分:1)

我假设您的列表 public static <T> Function<BaseResponse<T>, Observable<T>> convertDataFlatMap() { return new Function<BaseResponse<T>, Observable<T>>() { @Override public Observable<T> apply(BaseResponse<T> response) { if (!Constants.SUCCESS_CODE.equals(response.getStatus_code())) { BaseErrorResponse baseErrorResponse = new BaseErrorResponse(); baseErrorResponse.setError(response.getStatus_code(), response.getStatus()); return Observable.error(BaseException.toServerError(baseErrorResponse)); } T data = response.getData(); if (null == data) { return Observable.empty(); } return Observable.just(response.getData()); } }; } 将始终具有与b中的列表相同数量的元素,并且您始终希望替换(而不是插入)第二个元素。

这有效:

a

首先for ax, bx in zip(a, b): ax[1] = bx zip中的每个元素与a中的对应元素配对,然后for循环一次给您每一对,分别为b和{ {1}}。由于ax是一个列表,因此实际上是bx中的列表(不是副本),并且使用ax,您只是使用a覆盖列表中的第二个元素。

另一种方法是使用列表理解:

a[1] = bx

这具有不修改原始bx的优点,但是为您提供了包含替换项的新列表。

这里发生的是,它仍然使用new_a = [[ax[0], bx, *ax[2:]] for ax, bx in zip(a, b)] 进行配对,但是它不是替换a,而是用zip的第一个元素创建一个新列表,后跟{{ 1}},然后是ax[1]的其余部分(从第三个元素开始)。请注意其中的ax-将列表“分解”为单独的元素,因此可以将其添加到新列表中。

您还问过要避免使用bx,尽管我认为这是更糟糕的解决方案:

ax

此操作是让*zipfor i in range(len(a)): a[i][1] = b[i] 的长度减去1,一次将i的每个元素的第二个元素替换为通过使用0索引aa来匹配b中的匹配元素。

答案 2 :(得分:0)

或尝试:

print([[x[0], y, *x[2:]] for x, y in zip(a, b)])

输出:

[['04\x01\x01997', 'alphanum1', '22', '4.0'], ['07\x01\x01997', 'alphanum2', '23', '2.0']]

答案 3 :(得分:0)

此代码有效

a = [['04\01\1997','alphanum4569874','22','4.0'],['07\01\1997','Anee_69213654','23','2.0']]

b = ['alphanum1','alphanum2']
c=0
for i in a:
    i[1]=b[c]
    c+=1
print(a)

输出

[['04\x01\x01997', 'alphanum1', '22', '4.0'], ['07\x01\x01997', 'alphanum2', '23', '2.0']]

答案 4 :(得分:-1)

我想你想要的是

 for item in a:
    for i in b:
       item[1].append(i)

 print (a)