簡體   English   中英

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

[英]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

首先zipa每個元素與b的相應元素配對,然后 for 循環一次為您提供一對axbx 由於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到索引二者ab

或嘗試:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM