Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环以更改大列表中的元素(一次6个),并为每次迭代创建一个新变量_Python_List_Loops_Plotly_Slice - Fatal编程技术网

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

Python 循环以更改大列表中的元素(一次6个),并为每次迭代创建一个新变量,python,list,loops,plotly,slice,Python,List,Loops,Plotly,Slice,我正在使用plotly制作一个风玫瑰,它使用下拉菜单来绘制每个月。我想使用循环稍微清理一下我的代码,但是我已经用一种基本的方法成功了,并且希望在这个过程中了解更多 一些快速的背景: Plotly使用“迹线”绘制特定类型的数据(我每月有6条不同的迹线表示风速箱)。要使下拉菜单工作,您需要一个布尔列表,说明哪些是可见的。例如,如果我想要1月份的数据,我需要一个12个月内78个布尔值的列表和年度总数据,列表元素5-11为真,其余为假 下面是前面提到的基本代码,尽管它是工作代码 TF = [False]

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

一些快速的背景: Plotly使用“迹线”绘制特定类型的数据(我每月有6条不同的迹线表示风速箱)。要使下拉菜单工作,您需要一个布尔列表,说明哪些是可见的。例如,如果我想要1月份的数据,我需要一个12个月内78个布尔值的列表和年度总数据,列表元素5-11为真,其余为假

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

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个元素的片段,复制到一个新变量,然后每月重新执行。我只是想循环这个来清理它。任何帮助都将不胜感激

使用中的示例变量

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"}]),
名单 您可以使用列表理解创建所有列表,然后使用析构化将每个列表分配给相关变量


L=[[False]*(n*6)+[True]*6+[False]*(73-n*6)表示范围(0,13)内的n)
安、一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月=L
列表词典 这里有一个替代方法,它可以创建一个带有键的字典
Ann\u L、Jan\u L、Feb\u L等。

要使用此功能,您需要调整代码以使用
months['Ann_L']等。

names=['Ann_L'、'Jan_L'、'Feb_L'、'Mar_L'、'Apr_L'、'May_L'、'Jun_L',
‘七月’、‘八月’、‘九月’、‘十月’、‘十一月’、‘十二月’]
月份={names[n]:[False]*(n*6)+[True]*6+[False]*(73-n*6)表示范围(0,13)内的n}

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

从日历导入月份\u名称
月份=列表(月份名称)
月[0]=“年度”
按钮=[{
“标签”:月[i],
'方法':'更新',
'args':[{'visible':[False]*(i*6)+[True]*6+[False]*(73-i*6)},{'title':月名[i]}
}适用于范围(13)]
您不必创建缩写月份名称的变量


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

您如何使用变量Jan_L等。提供一个包含这些变量以及如何绘制它们的最小可复制示例。这将有助于重构/使用字典映射在我使用变量的代码中编辑的跟踪等。它所代表的只是一长串的布尔,这很好。事实上,我想说的是(答案几乎相同),OP应该只将月份保存在一个列表中,而不是分配单独的变量,这几乎总是更难处理。可以把它叫做
Months
。哇,这太棒了,它工作得很好,正是我想要的。谢谢你这是一个非常优雅的解决方案,只有一个列表。我打算建议使用itertools,这肯定有点笨手笨脚。除了是一个成功的解决方案之外,我还想弄清楚到底发生了什么,但确实非常优雅。