簡體   English   中英

列表理解可從兩個列表創建字符串列表

[英]List comprehension to create list of strings from two lists

我有兩個字符串列表,我想用它們創建一個字符串列表。

m1 = ["Ag", "Pt"]
m2 = ["Ir", "Mn"]
codes = []
for i in range (len (m1) ):
    codes.append('6%s@32%s' %(m1[i], m2[i] ) )
print codes

例如,代碼可能具有元素[“ 6Ag @ 32Ir”,“ 6Pt @ 32Mn”]

我想將以下內容轉化為列表理解。

非壓縮方式:

>>> m1 = ["Ag", "Pt"]
>>> m2 = ["Ir", "Mn"]
>>> ['6%s@32%s' %(m1[i], m2[i]) for i in range(min(len(m1), len(m2)))]
['6Ag@32Ir', '6Pt@32Mn']

把它變成發電機:

>>> ('6%s@32%s' %(m1[i], m2[i]) for i in xrange(min(len(m1), len(m2))))

Python 2,您可以執行以下操作:

>>> ['6%s@32%s' % (x, y) for x, y in map(None, m1, m2)]
['6Ag@32Ir', '6Pt@32Mn']

或者,您甚至不需要打開元組的包裝:

>>> ['6%s@32%s' % t for t in map(None, m1, m2)]

您可以簡單地zip它們並像這樣打印它們

m1, m2 = ["Ag", "Pt"], ["Ir", "Mn"]
print ["6{}@32{}".format(*items) for items in zip(m1, m2)]
# ['6Ag@32Ir', '6Pt@32Mn']

或者,如果您更喜歡map方法,

from itertools import starmap
print list(starmap("6{}@32{}".format, zip(m1, m2)))

要么

print [item for item in starmap("6{}@32{}".format, zip(m1, m2))]

您可以使用列表推導zip

>>> m1 = ["Ag", "Pt"]
>>> m2 = ["Ir", "Mn"]
>>> zip(m1, m2)  #  zip is used to pair-up the items in m1 and m2
[('Ag', 'Ir'), ('Pt', 'Mn')]
>>> ["6%s@32%s" % x for x in zip(m1, m2)]
['6Ag@32Ir', '6Pt@32Mn']
>>>

請注意,如果m1m2較大,則應使用itertools.izip而不是zip (在python 2.x中,這會創建不必要的列表)。 但是,示例中的列表很小,因此這不是問題。

暫無
暫無

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

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