Разбить список на несколько подсписков, изменить отдельный подсписок, а затем объединить все подсписки, чтобы сформировать их в один новый список? - PullRequest
0 голосов
/ 24 сентября 2019

Я должен написать код для выполнения следующих шагов:

  1. Загрузка файла и сохранение содержимого файла в список.(файл содержит один столбец и 1223 строки чисел, скажем, в коде Matlab 1:1:1223)
  2. Автоматическое разбиение списка на несколько подсписков.(скажем, каждый подсписок из 100 чисел, т.е. 1223/100 = 12.23 (приблизительно 13 подсписки))
  3. Увеличение размера шага в определенном подсписке (скажем, подсписок №. 3 содержаниеот 201:1:300 до 201:0.5:300).
  4. После изменения определенного подсписка, объединяя весь список в единый список.

Я сделал первый шаг иЯ изо всех сил пытаюсь выполнить шаги 2, 3 и 4. Я не могу найти способ реализовать в tcl (я новичок в TCL).Я создал прототип в MATLAB (особенно, чтобы объяснить мою потребность в сообществе StackOverflow).Ниже приведен код, который я написал в MATLAB.Но в конечном итоге я должен реализовать это в TCL.(Используя концепцию cell в MATLAB, весь процесс стал проще)

clc
clear all
close all

Data_Initial = 1:1:1223;
Elements_in_List = 100;

% Dividing the list into Multiple sub-lists

Total_SubLists = floor(length(Data_Initial)/Elements_in_List);

if ((Total_SubLists*Elements_in_List) < length(Data_Initial))
    Total_SubLists = Total_SubLists + 1;
end

for i = 1: Total_SubLists

    Sublist_Begin_RowID = (i - 1)* Elements_in_List + 1;
    Sublist_End_RowID = i * Elements_in_List;

    if (i < Total_SubLists)
        SubLists{i} = Data_Initial(:, Sublist_Begin_RowID:Sublist_End_RowID);
    else 
        SubLists{i} = Data_Initial(:, Sublist_Begin_RowID:end, :);
    end
end

% Changing List NO. 3

K = 3;

A = SubLists{K};
A = A(1):0.5:A(end);
SubLists{K} = A;

% Re-Joining all the list to from a New data

Data_New = [];
for i = 1:length(SubLists)
    Data_New = horzcat(Data_New, SubLists{i});
end

Может кто-нибудь помочь мне выполнить шаги 2, 3 и 4.

1 Ответ

1 голос
/ 24 сентября 2019

Загрузка файла и сохранение содержимого файла в список.

Используйте open и splitкоманды.

Автоматическое разбиение списка на несколько подсписков.

См. этот предыдущий ответ: Разделение списка чисел на меньший список на основе диапазонав TCL

Увеличить размер шага в определенном подсписке

Вы хотите взглянуть на Tcl lset, который позволяетполучать доступ к структурам подсписков и манипулировать ими с помощью индексных выражений на основе нуля в 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 и оператора расширения (разбора времени) {*}:

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

Но это также зависитна уровнях вложенности в вашем суперсписке: см. двухуровневые брызги TCL

...