【问题标题】:How can I put this DRY code into a for loop?如何将此 DRY 代码放入 for 循环中?
【发布时间】:2020-09-18 06:14:04
【问题描述】:

我正在 pyplot 中格式化一个图例,并成功获得了我想要的输出。但是,我正在尝试弄清楚如何将此代码格式化为 for 循环。


这是我要循环的代码:

L.get_texts()[0].set_text('Global')
L.get_texts()[1].set_text('Bangkok')
L.get_texts()[2].set_text('NYC')
L.get_texts()[3].set_text('Perth')
L.get_texts()[4].set_text('Quito')
L.get_texts()[5].set_text('Santiago')
L.get_texts()[6].set_text('Singapore')
L.get_texts()[7].set_text('Tianjin')

我可以为每个索引 [0,7] 循环,但我也不知道如何循环 set_text('argument')。这是我迄今为止尝试过的:

legend_labels = ['Global', 'Bangkok', 'NYC', 'Perth', 'Quito', 'Santiago', 
'Singapore', 'Tianjin']

for i in range(8):
L.get_texts()[i].set_text(legend_labels)

我创建了我想循环的列表,legend_labels。我尝试了一些不同的嵌套 for 循环,但似乎无法使其正常工作。

从我现在正在尝试的代码中,这是我得到的输出: Notice only 'Tianjin' gets printed on the legend.

这是我想要的输出:Each item in list is printed on the legend

【问题讨论】:

    标签: python for-loop matplotlib


    【解决方案1】:
    legend_labels = ['Global',
                     'Bangkok',
                     'NYC',
                     'Perth',
                     'Quito',
                     'Santiago',
                     'Singapore',
                     'Tianjin'
                     ]
    
    for i in range(8):
        L.get_texts()[i].set_text(legend_labels[i])
    

    【讨论】:

      【解决方案2】:

      您需要将第 i 个标签分配给 i't 文本:

      for i in range(8):
          L.get_texts()[i].set_text(legend_labels[i])
      

      更多的pythonic会是

      for text, label in zip(L.get_texts(), legend_labels):
          text.set_text(label)
      

      【讨论】:

        【解决方案3】:

        您可以使用enumerate,这将为您提供索引i 以及标签

        for i, label in enumerate(legend_labels):
            L.get_texts()[i].set_text(label)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-22
          • 2012-12-03
          • 1970-01-01
          • 2019-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多