我已经完成了我的研究并且非常接近解决我的问题,但我需要一些帮助来越过终点线!
我有两个清单:
Countries = ["Germany", "UK", "France", "Italy"]
Base = ["2005","1298",1222","3990"]
预期结果:
"Germany (2005)", "UK (1298)", "France (1222)", "Italy (3990)"
我的剧本:
zipped = zip(Countries, Base)
结果:
[('Germany', '2005')", ('UK', '1298'), ('France', '1222'), ('Italy', '3990')]
所以我很接近,但我不知道如何正确地格式化它。
由于
答案 0 :(得分:5)
你几乎就在那里,你只需要使用string formatting:
>>> ["{} ({})".format(x,y) for x,y in zip(Countries, Base)]
['Germany (2005)', 'UK (1298)', 'France (1222)', 'Italy (3990)']
使用str.join
:
>>> print ", ".join('"{} ({})"'.format(x,y) for x,y in zip(Countries, Base))
"Germany (2005)", "UK (1298)", "France (1222)", "Italy (3990)"
使用itertools.izip
进行内存有效解决方案。
答案 1 :(得分:5)
除了Ashwini's solution之外,您还可以利用map
对其参数执行的隐式压缩。
>>> ', '.join(map('"{} ({})"'.format, Countries, Base))
'"Germany (2005)", "UK (1298)", "France (1222)", "Italy (3990)"'
timeit
结果表明此解决方案比Ashwini提出的解决方案更快:
>>> from timeit import Timer as t
>>> t(lambda: ', '.join(map('"{} ({})"'.format, Countries, Base))).timeit()
4.5134528969464
>>> t(lambda: ", ".join(['"{} ({})"'.format(x,y) for x,y in zip(Countries, Base)])).timeit()
6.048398679161739
>>> t(lambda: ", ".join('"{} ({})"'.format(x,y) for x,y in zip(Countries, Base))).timeit()
8.722563482230271
答案 2 :(得分:0)
此方法使用map但放弃了字符串格式,而选择了另一个连接和字符串连接:
print ', '.join(map(lambda a: ' ('.join(a)+')', zip(Countries, Base))) #outputs string
print map(lambda a: ' ('.join(a)+')', zip(Countries, Base)) #outputs list
答案 3 :(得分:0)
试试这个
','.join([Countries[i]+'('+Base[i]+')' for i in range(len(Countries))])