簡體   English   中英

更快地解決循環和字典問題

[英]Quicker solution to the problem with loops and dictionaries

我最近解決了一個問題,我確信必須有更快的解決方案。 我只是在學習,我想編寫高效的代碼,所以如果你能向我提出任何建議會很有幫助。

我想要這個輸出(我得到了):

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}.")

最后我想用一個人的名字和他或她喜歡去的地方(用逗號分隔)一句話

我希望我正確地描述了問題。 我只想優化我的代碼。 我將不勝感激任何建議。

您缺少的是joinitems功能。 join用指定的分隔符連接所有可迭代項。 如果只有 1 項,則不會添加分隔符。 通常認為用++=連接字符串是一種不好的做法。 字符串是不可變的,因此每次連接都會產生一個新的字符串,必須為其分配內存。 為了避免這種情況,您可以首先將字符串的所有部分收集到列表中(您已經將其作為輸入),然后加入它們。

items()返回字典的 (key, value) 元組。

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)}.")

我能想到的最簡單的方法是這樣的:

for name, places in favourite_places.items():
  print(f'{name} likes to go here: {", ".join(places)}.')

.items()從字典中返回一個 (key, value) 元組列表,這些元組被解構為 name 和 places,然后", ".join(places)將返回一個字符串,該字符串將位置列表中的每個元素分開用逗號,如果只有一個元素,它會自動省略。

嘗試使用replace

for name, places in favourite_places.items():  
    print(name + " likes to go to here: " + str(places).replace('[', '').replace("'", "").replace(']', ''))

這里有一些改進:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM