Python, создание списка списков при создании имен увеличенных списков

#python #list

Вопрос:

Программа начинается с ввода строки. Программа считывает строку, а затем делит ее на разные переменные с помощью индексации. Так:

 var_1 = string[position]   string[position 1]
var_2 = string[position 2]   string[position 3]
 

и так далее, и тому подобное. Я использую петлю и увеличиваю позицию.

Я хочу, чтобы первые 8 переменных были сохранены в списке. Следующие 8 переменных сохраняются в следующем списке, и так далее, и так далее.

Проблема в том, что длина входной строки может быть разной длины. Строка-это данные, которые всегда имеют правильную длину для создания целого ряда списков. Но это может быть два списка из десятков списков.

Мне нужно получить доступ к предыдущему списку данных, чтобы выполнить вычисления.

Я хотел бы сделать что-то вроде:

 difference = list_2[3] - list_1[3]
list_2  = [difference] # which I think makes the difference the new 9th item in list_2
 

Проблема в том, что я не знаю, сколько там может быть списков. Я пытался называть списки постепенно. Затем, когда я получу информацию, я смогу индексировать значения с помощью list_name[позиция#]. Я не знаю, как увеличить имя списка, чтобы я мог выполнить индексацию.

Как создать имена увеличенных списков для индексации? Первая причина заключается в том, что я не хочу составлять огромное количество имен списков (особенно когда я не буду использовать их все) Вторая причина заключается в том, что я не знаю, сколько списков мне потребуется составить, пока не будет введена строка данных?

Я буду знать, сколько списков нужно составить, взяв len(строку) / 32 # есть 32 символа для заполнения всех значений переменных в каждом списке. Итак, если у меня 128 символов, я хочу:

 list_1
list_2
list_3
list_4
 

но если в строке 416 символов, я хочу, чтобы имена списков увеличивались до:

 ...
list_12
list_13
 

Спасибо, SDD

Комментарии:

1. Вы ищете список списков [[entries of list1], [entries of list2], ...]

2. Что вы пытались сделать до сих пор, чтобы достичь этого ? Пожалуйста, напишите код.

Ответ №1:

Вместо:

 var1
var2
var3
...
 

составьте var список, чтобы у вас было:

 var[0]
var[1]
var[2]
...
 

Записи в списке могут быть самими списками. Как правило, если у вас когда-либо возникала проблема программирования, которая, по-видимому, требует создания множества переменных, которые содержат одно и то же, вы, вероятно, захотите создать один контейнер (например, список или диктант), содержащий все эти значения, чтобы вы могли легко перебирать их (независимо от того, сколько их) вместо того, чтобы вводить кучу отдельных имен и ограничиваться определенным фиксированным числом из них.

Вот очень быстрый пример в описании того, как вы могли бы построить список из восьми элементов списков двухсимвольных строк на основе одной входной строки:

 >>> string = "asldkfjalskdfjalskdjflaskdjflaskdjflaksdjfkjsldkfjsldakjfsdlkaaa"
>>> var = [[]]
>>> for i in range(0, len(string), 2):
...     if len(var[-1]) == 8:
...         var.append([])
...     var[-1].append(string[i:i 2])
...
>>> var
[['as', 'ld', 'kf', 'ja', 'ls', 'kd', 'fj', 'al'], ['sk', 'dj', 'fl', 'as', 'kd', 'jf', 'la', 'sk'], ['dj', 'fl', 'ak', 'sd', 'jf', 'kj', 'sl', 'dk'], ['fj', 'sl', 'da', 'kj', 'fs', 'dl', 'ka', 'aa']]
>>> var[0]
['as', 'ld', 'kf', 'ja', 'ls', 'kd', 'fj', 'al']
>>> var[1]
['sk', 'dj', 'fl', 'as', 'kd', 'jf', 'la', 'sk']
>>> var[2]
['dj', 'fl', 'ak', 'sd', 'jf', 'kj', 'sl', 'dk']
>>> var[3]
['fj', 'sl', 'da', 'kj', 'fs', 'dl', 'ka', 'aa']
 

Здесь мы используем range функцию, которая помогает нам перебирать индексы строки с шагом 2, и мы используем срез строки ( string[i:i 2] ), чтобы легко захватить эти двухсимвольные срезы.

var[-1] всегда является последним элементом списка var , который начинается как список, содержащий один пустой список ( [[]] ); при повторении строки мы всегда добавляем эти два символа в конец последнего списка.

Мы также всегда проверяем var[-1] , достигло ли еще восьми элементов; если да, то этот подсписок завершен, поэтому мы append создаем новый пустой список до конца var , чтобы мы могли начать новый.

Комментарии:

1. Я ценю ваш ответ. Это должно хорошо работать для того, что я пытаюсь сделать. Все значения состоят из 2 символьных строк, поэтому я смогу использовать функцию диапазона, которая чище, чем мой гораздо больший цикл. Некоторые значения представляют собой несколько строк из 2 символов, соединенных вместе. Я не думал открывать список списков, начиная с пустого списка. Также я не знал, что вы можете проиндексировать список с отрицательным индексом, как в вашем примере var[-1]. Я сделал обходной маневр с длиной списка. Это отличные советы, и спасибо, что объяснили их подробно!