#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]. Я сделал обходной маневр с длиной списка. Это отличные советы, и спасибо, что объяснили их подробно!