为了账号安全,请及时绑定邮箱和手机立即绑定

Python:合并两个列表并将它们显示为字符串

Python:合并两个列表并将它们显示为字符串

肥皂起泡泡 2021-03-31 13:34:19
我已经完成了研究,已经非常接近解决我的问题,但是我需要一点帮助才能越过终点!我有两个清单: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')]所以我接近了,但是我不知道如何正确格式化它。
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您已经快到了,只需要使用字符串格式即可:


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


查看完整回答
反对 回复 2021-04-06
?
青春有我

TA贡献1784条经验 获得超8个赞

除了Ashwini的解决方案之外,您还可以利用map对其参数执行的隐式zip压缩。


>>> ', '.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


查看完整回答
反对 回复 2021-04-06
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

此方法使用map,但放弃了字符串格式,而采用了另一种联接和字符串连接:


print ', '.join(map(lambda a: ' ('.join(a)+')', zip(Countries, Base))) #outputs string


print map(lambda a: ' ('.join(a)+')', zip(Countries, Base)) #outputs list


查看完整回答
反对 回复 2021-04-06
  • 3 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信