首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环,以更改大列表中的元素(每次6个),并为每次迭代创建一个新变量。

循环,以更改大列表中的元素(每次6个),并为每次迭代创建一个新变量。
EN

Stack Overflow用户
提问于 2021-05-11 23:02:22
回答 2查看 60关注 0票数 1

我正在制作一个风玫瑰,巧妙地使用下拉菜单来绘制每个月。我想使用循环来稍微清理我的代码,但是已经成功地使用了一种基本的方法,并且希望在这个过程中学到更多。

一些快速背景:实际上使用“跟踪”来绘制特定类型的数据(我每个月有6个不同的跟踪表示风速箱)。要使下拉菜单工作,您需要一个bools列表,说明什么是可见的。例如,如果我想要一月份的数据,我需要一个12个月的78个bools的列表,以及每年的总数据,其中列表元素5-11为true,其余为false。

下面是前面提到的基本代码,尽管是工作代码。

代码语言:javascript
复制
TF = [False]*78
TF[0:5]=[True]*6
Ann_L = TF.copy()

TF = [False]*78
TF[6:11]=[True]*6
Jan_L = TF.copy()

TF = [False]*78
TF[12:17]=[True]*6
Feb_L = TF.copy()

TF = [False]*78
TF[18:23]=[True]*6
Mar_L = TF.copy()

TF = [False]*78
TF[24:29]=[True]*6
Apr_L = TF.copy()

TF = [False]*78
TF[30:35]=[True]*6
May_L = TF.copy()

TF = [False]*78
TF[36:41]=[True]*6
Jun_L = TF.copy()

TF = [False]*78
TF[42:47]=[True]*6
Jul_L = TF.copy()

TF = [False]*78
TF[48:53]=[True]*6
Aug_L = TF.copy()

TF = [False]*78
TF[54:59]=[True]*6
Sep_L = TF.copy()

TF = [False]*78
TF[60:65]=[True]*6
Oct_L = TF.copy()

TF = [False]*78
TF[66:71]=[True]*6
Nov_L = TF.copy()

TF = [False]*78
TF[72:77]=[True]*6
Dec_L = TF.copy()

如您所见,我创建了一个大列表,编辑了6个元素切片,复制到一个新变量,并为每个月重新做了一次。我只是想循环这个来清理它。任何帮助都将不胜感激。

正在使用的示例变量

代码语言:javascript
复制
fig.update_layout(
updatemenus=[
    dict(
        x=0.1,
        xanchor="left",
        y=0.99,
        yanchor="top",
        active=0,
        showactive= True,
        buttons=list([
            dict(label="Annual",
                 method="update",
                 args=[{"visible": Ann_L},
                       {"title": "Annual"}]),
            dict(label="January",
                 method="update",
                 args=[{"visible": Jan_L},
                       {"title": "January"}]),
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-11 23:30:40

名单清单

可以使用列表理解创建所有列表,然后使用析构将每个列表分配给相关变量。

代码语言:javascript
复制
L = [[False]*(n*6)+[True]*6+[False]*(73-n*6) for n in range(0, 13)]

Ann_L, Jan_L, Feb_L, Mar_L, Apr_L, May_L, Jun_L, Jul_L, Aug_L, Sep_L, Oct_L, Nov_L, Dec_L = L

列表字典

这里有一个替代方法,它创建一个带有键Ann_L, Jan_L, Feb_L etc.的字典

要使用它,您需要调整代码以使用months['Ann_L'] etc.

代码语言:javascript
复制
names = ['Ann_L', 'Jan_L', 'Feb_L', 'Mar_L', 'Apr_L', 'May_L', 'Jun_L', 
         'Jul_L', 'Aug_L', 'Sep_L', 'Oct_L', 'Nov_L', 'Dec_L']

months = {names[n]: [False]*(n*6)+[True]*6+[False]*(73-n*6) for n in range(0, 13)}
票数 2
EN

Stack Overflow用户

发布于 2021-05-11 23:40:38

您甚至可以像这样动态地构造按钮

代码语言:javascript
复制
from calendar import month_name

months = list(month_name)
months[0] = 'Annual'
buttons = [{
    'label': months[i],
    'method': 'update',
    'args': [{'visible': [False]*(i*6)+[True]*6+[False]*(73-i*6)}, {'title': month_name[i]}]
} for i in range(13)]

您不必创建缩写月份名称的变量

编辑:将“args”固定为列表

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67495362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档