如何在特定位置替换嵌套列表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']]
答案 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
此操作是让*
从zip
到for i in range(len(a)):
a[i][1] = b[i]
的长度减去1,一次将i
的每个元素的第二个元素替换为通过使用0
索引a
和a
来匹配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)