【问题标题】:Quicker solution to the problem with loops and dictionaries更快地解决循环和字典问题
【发布时间】:2020-10-28 16:59:58
【问题描述】:

我最近解决了一个问题,我确信必须有更快的解决方案来解决这个问题。我只是在学习,我想编写高效的代码,所以如果你能给我任何建议会很有帮助。

我想要这个输出(我得到了):

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

最后我想要一句写上人名和他或她喜欢去的地方(用逗号隔开)。

我希望我正确地描述了这个问题。我只想优化我的代码。如有任何建议,我将不胜感激。

【问题讨论】:

    标签: python performance loops dictionary


    【解决方案1】:

    您缺少的是 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)}.")
    

    【讨论】:

    • 谢谢你。我实际上还不知道 .join 功能。祝你一切顺利。感谢您的宝贵时间。
    • 还有一件事。如果我有数字(整数)而不是位置(字符串),我可以这样做吗?因为我已经尝试过,但我遇到了一个错误。有没有其他方法可以以这种方式连接整数而无需将它们转换为 str?
    • 是的,将它们转换成字符串。会像', '.join(map(str, int_list))
    【解决方案2】:

    我能想到的最简单的方法是这样的:

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

    .items() 返回字典中的 (key, value) 元组列表,这些元组被解构为名称和地点,然后", ".join(places) 将返回一个字符串,该字符串用逗号分隔地点列表中的每个元素, 如果只有一个元素会自动忽略它。

    【讨论】:

      【解决方案3】:

      尝试使用replace

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

      【讨论】:

        【解决方案4】:

        这里有一些改进:

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

        【讨论】:

          猜你喜欢
          • 2019-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-15
          相关资源
          最近更新 更多