![](/img/trans.png)
[英]Replace elements in list - with a nested list containing said elements (python3)
[英]How to replace elements in a nested list python 3?
如何替換嵌套列表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']]
您可以使用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']]
我假設你的列表b
永遠有相同數量的元素,因為在列表中a
和你總是要替換(未插入)的第二個元素。
這有效:
for ax, bx in zip(a, b):
ax[1] = bx
首先zip
將a
每個元素與b
的相應元素配對,然后 for 循環一次為您提供一對ax
和bx
。 由於ax
是一個列表,它實際上是在列表中a
(不是副本),並用a[1] = bx
你只是覆蓋在列表中的第二個元素bx
。
另一種方法是使用列表理解:
new_a = [[ax[0], bx, *ax[2:]] for ax, bx in zip(a, b)]
這具有不修改原始a
的優點,但會為您提供帶有替換的新列表。
這里發生的事情是它仍然使用zip
進行配對,但它沒有替換ax[1]
,而是使用ax
的第一個元素創建一個新列表,然后是bx
,然后是從第三個元素開始的ax
的其余部分. 注意那里的*
- 它將列表“分解”為單獨的元素,因此可以將它們添加到新列表中。
您還詢問了避免使用zip
,盡管我認為這是一個更糟糕的解決方案:
for i in range(len(a)):
a[i][1] = b[i]
這樣做是讓i
從運行0
到的長度a
減一,取代的每個元件的第二元件a
一個在與來自匹配元素相關的時間b
,通過使用i
到索引二者a
和b
。
或嘗試:
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']]
此代碼有效
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']]
我想你想要的是這個:
for item in a:
for i in b:
item[1].append(i)
print (a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.