Tcl 将列表拆分为多个子列表,更改一个子列表,然后将所有子列表重新合并为一个新列表?

Tcl 将列表拆分为多个子列表,更改一个子列表,然后将所有子列表重新合并为一个新列表?,tcl,tk,Tcl,Tk,我必须为执行以下步骤编写代码 加载文件并将文件内容保存到列表中。(该文件包含一列和1223行数字,例如在Matlab代码中1:1:1223) 自动将列表拆分为多个子列表。(假设每个子列表有100个数字,即1223/100=12.23(大约13子列表)) 增加特定子列表中的步长(例如子列表编号3内容从201:1:300增加到201:0.5:300) 更改特定子列表后,合并所有列表以形成单个列表 我已经完成了第一步,我正在努力完成第2步、第3步和第4步。我找不到在tcl中实现的方法(我是tcl的新手

我必须为执行以下步骤编写代码

  • 加载文件并将文件内容保存到列表中。(该文件包含一列和1223行数字,例如在Matlab代码中
    1:1:1223
  • 自动将列表拆分为多个子列表。(假设每个子列表有100个数字,即
    1223/100=12.23
    (大约
    13
    子列表))
  • 增加特定子列表中的步长(例如子列表编号
    3
    内容从
    201:1:300
    增加到
    201:0.5:300
  • 更改特定子列表后,合并所有列表以形成单个列表
  • 我已经完成了第一步,我正在努力完成第2步、第3步和第4步。我找不到在tcl中实现的方法(我是tcl的新手)。我已经在MATLAB中创建了一个原型(特别是解释我在StackOverflow社区中的需求)。以下是我用MATLAB编写的代码。但最终,我必须在TCL中实现这一点。(使用MATLAB中的
    单元
    概念,整个过程变得更简单)

    clc
    清除所有
    全部关闭
    数据_初始值=1:1:1223;
    _列表中的元素_=100;
    %将列表划分为多个子列表
    总计子列表=楼层(长度(数据初始)/元素列表中的元素);
    if((总子列表*元素列表中的元素)<长度(数据初始值))
    _子列表总数=_子列表总数+1;
    结束
    对于i=1:总计_子列表
    子列表\u Begin\u RowID=(i-1)*列表中的元素\u+1;
    子列表\u End\u RowID=i*元素\u在\u列表中;
    如果(i<总_子列表)
    子列表{i}=Data_Initial(:,子列表_Begin_RowID:Sublist_End_RowID);
    其他的
    子列表{i}=Data_Initial(:,子列表_Begin_RowID:end,:);
    结束
    结束
    %更改名单第三号
    K=3;
    A=子列表{K};
    A=A(1):0.5:A(结束);
    子列表{K}=A;
    %将所有列表重新加入到新数据中
    数据_New=[];
    对于i=1:长度(子列表)
    Data_New=horzcat(Data_New,子列表{i});
    结束
    
    有人能帮我做第2、3和4步吗

    加载文件并将文件内容保存到列表中

    使用和命令

    自动将列表拆分为多个子列表

    请参见前面的回答:

    增加特定子列表中的步长

    您想看看Tcl,它允许使用Tcl基于零的索引表达式访问和操纵子列表的结构

    % set superList [list [list 201 1 300] [list 202 1 300] [list 203 1 300]]
    {201 1 300} {202 1 300} {203 1 300}
    % lset superList 2 1 0.5
    {201 1 300} {202 1 300} {203 0.5 300}
    
    更改特定子列表后,合并所有列表以形成 单一列表

    实现这一点的一种方法是结合使用和(解析时间)扩展运算符
    {*}

    % concat {*}$superList
    201 1 300 202 1 300 203 0.5 300
    

    但这也取决于超级列表中的嵌套级别:请参见

    如果可行,最好根据步骤(2)和(3)中的要求计算特定位置,然后使用
    lset
    一次原始列表中的计算位置。非常感谢您提供答案。这非常有帮助,我正在根据您的答案实现代码。
    % concat {*}$superList
    201 1 300 202 1 300 203 0.5 300