我最近已经解决了一个问题,并且我肯定知道必须有一个更快的解决方案。我只是在学习,我想编写高效的代码,因此如果您可以向我提出任何建议,将会很有帮助。
我想要这个输出(我得到了):
Jozefína likes to go to here: Amsterdam ,Liverpool ,London.
Marek likes to go to here: Košice.
Jozef likes to go to here: Lisabon ,Vancouver.
PS:人物和城市的名称是完全随机的,因此您可以更改
我针对此问题的代码为:
favourite_places = {
"Jozefína": ["Amsterdam", "Liverpool", "London"],
"Marek": ["Košice"],
"Jozef": ["Lisabon", "Vancouver"]
}
for name in favourite_places:
line = ""
for place in favourite_places[name]:
if len(favourite_places[name]) == 1:
line = place
else:
line += place + " ,"
if line[-1] == ",":
line = line[0:-2]
print(f"{name} likes to go to here: {line}.")
最后,我想说一个句子,上面写着该人的名字和他或她喜欢去的地方(用逗号分隔)。
希望我能正确地描述问题。我只想优化我的代码。如有任何建议,我将不胜感激。
答案 0 :(得分:3)
您缺少的是join
和items
函数。
join
将所有带有指定定界符的iterable联接起来。如果只有一项,则不会添加任何定界符。将字符串与+
或+=
串联通常被认为是不好的做法。字符串是不可变的,因此每个串联产生一个新的字符串,该字符串必须为其分配内存。为了避免这种情况,您可以首先将字符串的所有部分收集到list中(您已经将其作为输入),然后将它们连接起来。
items()
返回字典(键,值)的元组。
favourite_places = {
"Jozefína": ["Amsterdam", "Liverpool", "London"],
"Marek": ["Košice"],
"Jozef": ["Lisabon", "Vancouver"]
}
for name, places in favourite_places.items():
print(f"{name} likes to go to here: {', '.join(places)}.")
答案 1 :(得分:1)
我想到的最简单的方法是这样的:
for name, places in favourite_places.items():
print(f'{name} likes to go here: {", ".join(places)}.')
.items()
返回字典中的(键,值)元组列表,这些元组被解构为名称和位置,然后", ".join(places)
将返回一个字符串,该字符串将列表中的每个元素分隔开放在逗号之间,如果只有一个元素,则会自动将其忽略。
答案 2 :(得分:0)
尝试使用replace
for name, places in favourite_places.items():
print(name + " likes to go to here: " + str(places).replace('[', '').replace("'", "").replace(']', ''))
答案 3 :(得分:0)
这是一些改进:
favourite_places = {
"Jozefína": ["Amsterdam", "Liverpool", "London"],
"Marek": ["Košice"],
"Jozef": ["Lisabon", "Vancouver"]
}
for name, place in favourite_places.items():
line = ', '.join(place)
print(f'{name} likes to go to here: {line}')