You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何从指定列表生成以1开头、3结尾的子列表?

提取以指定元素开头结尾的连续子列表

给定数字字符串列表:

List<String> items = [ '1', '2', '3', '1', '2', '4', '3', '1', '3' ];

需要生成所有以'1'开头、以'3'结尾的连续子列表,最终得到结果:

listOfLists = [[1,2,3], [1,2,4,3], [1,3]]

实现思路

核心逻辑是遍历列表时跟踪有效起始位置:

  • 遇到'1'时记录当前索引作为子列表的起点
  • 遇到'3'且存在有效起点时,提取从起点到当前位置的子序列,转换为数字后加入结果集,随后重置起点以准备下一个子列表

Python 实现代码

items = ['1', '2', '3', '1', '2', '4', '3', '1', '3']
result = []
start_idx = None

for idx, item in enumerate(items):
    if item == '1':
        start_idx = idx
    elif item == '3' and start_idx is not None:
        # 提取子列表并转换为整数类型
        sub_list = [int(x) for x in items[start_idx:idx+1]]
        result.append(sub_list)
        start_idx = None

print(result)  # 输出: [[1, 2, 3], [1, 2, 4, 3], [1, 3]]

Java 实现代码

import java.util.ArrayList;
import java.util.List;

public class SubListGenerator {
    public static void main(String[] args) {
        List<String> items = List.of("1", "2", "3", "1", "2", "4", "3", "1", "3");
        List<List<Integer>> listOfLists = new ArrayList<>();
        int startPos = -1;

        for (int i = 0; i < items.size(); i++) {
            String current = items.get(i);
            if ("1".equals(current)) {
                startPos = i;
            } else if ("3".equals(current) && startPos != -1) {
                List<Integer> subList = new ArrayList<>();
                for (int j = startPos; j <= i; j++) {
                    subList.add(Integer.parseInt(items.get(j)));
                }
                listOfLists.add(subList);
                startPos = -1;
            }
        }

        System.out.println(listOfLists); // 输出: [[1,2,3], [1,2,4,3], [1,3]]
    }
}

内容的提问来源于stack exchange,提问作者burbuja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:47:50