簡體   English   中英

如何合並兩個清單

[英]How to combine two lists

我可以用兩種方式編寫追加行。 均未產生預期的結果。 有沒有一種方法可以將其包裝成一行?

選項1:

row.append(x[1] for x in emails if x[0] == row[1]) 

產量:

[['project1', 'email1', <generator object <genexpr> at 0x0227D670>], ['project1', 'email2', <generator object <genexpr> at 0x022EB8A0>]]

選項2:

row.append([x[1] for x in emails if x[0] == row[1]]) 

產量:

[['project1', 'email1', ['john@gmail.com']], ['project1', 'email2', ['bill@gmail.com']]]

所需結果:

[['project1', 'email1', 'john@gmail.com'], ['project1', 'email2', 'bill@gmail.com']]

碼:

emails = [['email1','john@gmail.com'],['email2','bill@gmail.com']]

projects = [['project1', 'email1'], ['project1', 'email2']]

for row in projects:
    row.append(x[1] for x in emails if x[0] == row[1])
print projects

在您現有的代碼中,替換這一行:

row.append(x[1] for x in emails if x[0] == row[1])

附:

row.extend(x[1] for x in emails if x[0] == row[1])

一線解決方案

或者,消除循環並將代碼壓縮成一行:

>>> projects = [  row + [x[1] for x in emails if x[0] == row[1]] for row in projects ]
>>> print projects 
[['project1', 'email1', 'john@gmail.com'], ['project1', 'email2', 'bill@gmail.com']]
emails = [['email1','john@gmail.com'],['email2','bill@gmail.com']]

projects = [['project1', 'email1'], ['project1', 'email2']]
from itertools import chain


print([list(set((chain.from_iterable(ele)))) for ele in zip(emails,projects)])
[['email1', 'john@gmail.com', 'project1'], ['email2', 'project1', 'bill@gmail.com']]

要么:

print([list(set(ele).union(projects[ind])) for ind, ele in enumerate(emails)])

要么:

print([projects[ind] + [ele for ele in sub if ele not in projects[ind]] for ind, sub in enumerate(emails)])

所有不同的版本將適用於多個項目,而不僅僅是檢查單個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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