如何将列表转换为指定长度的滑动窗口元组?
滑动窗口生成指定长度元组的解决方案
嘿,这问题我熟!要实现这种滑动窗口式的元组生成,还得处理最后一个窗口补空字符串的需求,用Python可以轻松搞定,我给你两种实现方式:
方式一:清晰的循环写法
这种写法步骤明确,容易理解,适合刚接触滑动窗口逻辑的朋友:
# 定义你的变量 lgt = 3 my_list = ['Tout', 'le', 'monde', 'aime', 'le', 'chocolat', 'Le', 'est', 'une', 'source', 'agent', 'securité', 'chocolat', 'magnesium'] # 初始化结果列表 sliding_tuples = [] # 遍历每个起始索引 for i in range(len(my_list)): # 截取当前窗口的元素 current_window = my_list[i:i+lgt] # 如果窗口长度不足lgt,补全空字符串 current_window += [''] * (lgt - len(current_window)) # 转成元组并加入结果 sliding_tuples.append(tuple(current_window)) # 打印验证结果 for tpl in sliding_tuples: print(tpl)
方式二:简洁的列表推导式
如果喜欢更紧凑的代码,用列表推导式一行就能搞定:
lgt = 3 my_list = ['Tout', 'le', 'monde', 'aime', 'le', 'chocolat', 'Le', 'est', 'une', 'source', 'agent', 'securité', 'chocolat', 'magnesium'] sliding_tuples = [ tuple(my_list[i:i+lgt] + ['']*(lgt - len(my_list[i:i+lgt]))) for i in range(len(my_list)) ] # 输出结果 for tpl in sliding_tuples: print(tpl)
逻辑解释
- 我们遍历原列表的每个索引作为窗口起始点,这样能覆盖从第一个元素到最后一个元素开头的所有窗口场景
- 用切片
my_list[i:i+lgt]获取当前窗口元素,当到达列表末尾时,切片会自动截断,此时窗口长度会小于lgt - 用
[''] * (lgt - len(current_window))生成对应数量的空字符串,拼接到窗口末尾,保证每个元组的长度都是lgt - 最后把补全后的列表转成元组,就得到了你要的滑动窗口元组序列
运行代码后,输出结果和你给出的示例完全一致哦!
内容的提问来源于stack exchange,提问作者Sofiane Benbou
相关产品推荐
相关产品推荐

