如何将包含不同数量项目的列表解压缩到单个变量中?

How do I unpack a list with a varying amount of items into individual variables?

提问人:WaqarQureshii 提问时间:11/17/2023 更新时间:11/18/2023 访问量:64

问:

import streamlit as st

sidebar_counter = 9
# this number can vary depending on what is selected by the user

column_list = [col1, col2, col3, col4, col5]
# column_list can vary and be a list that is [col1, col5] and just two items depending on what is selected by the user

#my goal is to assign each col# to each column as follows:
col1, col2, col3, col4 = st.columns(sidebar_counter)

# where sidebar_counter will already include the number of columns selected.

有没有办法根据所选内容动态解压缩 COL1、COL2、COL3?

我尝试了以下方法:

import streamlit as st

column_list = st.columns(sidebar_counter)

但是,这不起作用,因为当我调用任何列(例如 col1)时,它没有被定义。

python 变量赋值 streamlit 迭代解包

评论

2赞 deceze 11/17/2023
如果你不知道你正在定义什么变量,那么你以后将如何使用它们?如果你不知道会有多少个东西,那么使用单个变量就没有意义了。您只能将您拥有的内容视为列表,并循环访问它。
1赞 Samwise 11/17/2023
如果你对如何使用这些可变定义的变量有一个想法,你应该在你的问题中包含一些示例代码——我怀疑一旦你开始尝试编写这个例子,上面所说的deceze会更有意义。好消息是,您无需拆开列表即可使用它执行操作。列表本身真的很有用。
0赞 WaqarQureshii 11/18/2023
我使用这些定义的变量的方式是在代码的倒数第二位: #my 目标是将每个 col# 分配给每列,如下所示:col1, col2, col3, col4 = st.columns(sidebar_counter)
0赞 deceze 11/18/2023
不,关键是:在你(假设)成功分配它们,你会如何处理它们!?

答:

-1赞 gamez_code 11/17/2023 #1

您可以在全局字典中设置变量,然后可以在脚本中调用该变量。例如:

for s in range(sidebar_counter):
    globals()[f"col{s+1}"] = column_list[s]

或者,您可以在本地字典中设置变量,然后将该变量调用到函数中。例如:

for s in range(sidebar_counter):
    locals()[f"col{s+1}"] = column_list[s]

但是,在我看来,最好的方法是将变量保存在常规字典中,然后您可以使用该字典。

评论

1赞 Samwise 11/18/2023
由于这些值已经在列表中,因此即使将其放入字典中也是不必要的复杂情况。
0赞 gamez_code 11/18/2023
@Samwise,我同意了
0赞 WaqarQureshii 11/18/2023
嗯,我不熟悉“全球词典”这个词,可能需要做一些研究来实现它。
0赞 gamez_code 11/18/2023
@WaqarQureshii 是 python 保存全局变量的字典。可能在文档中被称为不同。
0赞 ferdy 11/18/2023 #2

你试过这个吗?

import streamlit as st

sidebar_counter = 9
column_list = st.columns(sidebar_counter)

for i in range(sidebar_counter):
    with column_list[i]:
        st.write(f'column {i+1}')
        # other stuffs ...

输出

enter image description here