如何用Python循环构建关联Plotly轨迹可见性的布尔嵌套列表
构建Plotly轨迹可见性的布尔组合列表
我明白你想要生成一组布尔列表,让list_true块对应blocks的索引位置,其余位置用list_false填充——正好对应Plotly轨迹逐个显示的需求对吧?这里有两种直观的实现方式:
基础循环实现(易读性高)
先定义好你的基础列表:
import numpy as np list_true = list(np.ones(3, dtype=bool)) list_false = list(np.zeros(3, dtype=bool)) blocks = [1,2,3]
然后通过两层循环生成目标组合:外层循环控制list_true块的位置,内层循环拼接每个块:
combinations = [] # 遍历每个要放置list_true的位置索引 for target_idx in range(len(blocks)): current_combo = [] # 遍历所有块的位置 for block_idx in range(len(blocks)): if block_idx == target_idx: current_combo.extend(list_true) else: current_combo.extend(list_false) combinations.append(current_combo)
简洁列表推导式(代码更紧凑)
如果你喜欢更简洁的写法,可以用嵌套列表推导式结合sum()来拼接:
combinations = [ sum( [list_true if j == i else list_false for j in range(len(blocks))], [] # 用空列表作为初始值来拼接所有子列表 ) for i in range(len(blocks)) ]
验证结果
运行后,你可以通过以下代码查看生成的组合:
for num, combo in enumerate(combinations, 1): print(f"combination{num} = {combo}")
输出完全符合你的预期:
combination1 = [True, True, True, False, False, False, False, False, False]
combination2 = [False, False, False, True, True, True, False, False, False]
combination3 = [False, False, False, False, False, False, True, True, True]
而且这个逻辑是通用的——哪怕你后续修改blocks的长度(比如变成4个块),代码也能自动生成对应数量的组合,不需要调整核心逻辑。
内容的提问来源于stack exchange,提问作者Andreuccio
相关产品推荐
相关产品推荐

