[英]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))]
>>> 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']
>>>
請注意,如果m1
和m2
較大,則應使用itertools.izip
而不是zip
(在python 2.x中,這會創建不必要的列表)。 但是,示例中的列表很小,因此這不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.