0

我已经完成了我的研究,并且非常接近解决我的问题,但我需要一些帮助才能越过终点线!

我有两个清单:

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')] 

所以我很接近,但我不知道如何正确格式化它。

谢谢

4

4 回答 4

5

你快到了,你只需要使用字符串格式

>>> ["{} ({})".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内存高效的解决方案。

于 2013-06-27T09:33:42.597 回答
5

除了Ashwini 的解决方案之外,您还可以利用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
于 2013-06-27T09:35:38.600 回答
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
于 2013-06-27T09:41:14.763 回答
0

尝试这个

','.join([Countries[i]+'('+Base[i]+')' for i in range(len(Countries))])
于 2013-06-27T10:00:39.253 回答