Вы могли бы использовать много различных видов контейнеров для ваших целей, но ни один из них не имеют array
как неполное имя - Python имеет модуль array
, который можно импортировать из стандартной библиотеки, но array.array
типа слишком ограничен для ваших целей (только 1-D и с элементарными типами как содержимое); есть популярное стороннее расширение, известное как numpy
, которое имеет мощный тип numpy.array
, который вы можете использовать, если вы скачали и установили расширение, но, как вы ни разу не упоминаете numpy
, я сомневаюсь, что это то, что вы имеете в виду; соответствующие встроенные типы: list
и dict
. Я предполагаю, что вам нужен какой-либо контейнер, но если бы вы могли научиться использовать точную терминологию в будущем, это существенно поможет вам И любому, кто пытается вам помочь (например, список, когда вы имеете в виду список, массива, только когда вы имеете в виду массив, «контейнер», когда вы не уверены в том, какой контейнер использовать и т. д.).
Предлагаю вам посмотреть модуль csv
в стандартной библиотеке для более надежного способа чтения ваших данных, но это отдельная проблема. Начнем с того момента, когда у вас есть список списков по 5 строк по coords
, каждый подписок со строками, представляющими два ints, за которыми следуют три поплавка. Необходимо указать еще два ключевых аспекта ...
Один из ключевых аспектов, о которых вы нам не рассказываете: это список, который был отсортирован каким-то значительным образом? есть ли, в частности, какой-то значительный порядок, который вы хотите сохранить? Поскольку вы даже не упоминаете ни одного вопроса, я должен буду предположить, так или иначе, и я предполагаю, что нет никакого гарантированного или значимого порядка; но не повторение (каждая пара чисел моделирования/данных не допускается к более чем одному разу).
Второй ключевой аспект: существует ли такое же количество точек данных для моделирования в порядке возрастания (0, 1, 2, ...), или это не обязательно случай (и, кстати, сами моделирование пронумеровано 0 , 1, 2, ...)? Опять же, вам нечего понять в этой незаменимой части спецификаций - обратите внимание на то, сколько предположений вы вынуждаете потенциальных помощников делать всего лишь , не сообщая нам о таких явно важных аспектах.Не позволяйте людям, которые хотят помочь вам споткнуться в темноте: скорее, научитесь ask questions the smart way - это сэкономит неисчислимые суммы времени для себя и потенциальных помощников, и даст вам более качественную и полезную помощь, так почему бы не сделать это? Во всяком случае, вынужден сделать еще одно предположение, я должен предположить, что ничего не известно о числах моделирования и о числах точек данных в каждой симуляции.
С этими предположениями dict
появляется как единственная разумная структура, используемая для внешнего контейнера: словарь, ключ которого является кортежем с двумя элементами, номер моделирования, а затем число точек в симуляции. Значения также могут быть кортежами (с тремя поплавками каждый), поскольку, как представляется, у вас ровно 3 координаты на строку.
С учетом всех этих предположений ...:
def make_container(coords):
result = dict()
for s, d, x, y, z in coords:
key = int(s), int(d)
value = float(x), float(y), float(z)
result[key] = value
return result
Это всегда лучше, и быстро, чтобы иметь все значительные код в def
отчетности (т.е. как функции, которые можно назвать, возможно, с соответствующими аргументами), так Я представляю его таким образом. make_container
возвращает словарь, который вы можете указать с номером модели и номером набора данных; например,
d = make_container(coords)
print d[0, 0]
напечатает х, у, г для дп 0 из сима 0, предполагая, что она существует (вы получите ошибку, если такая комбинация сим/дп не существует). dicts имеет много полезных методов, например. изменение оператора печати выше
print d.get((0, 0))
(да, вы сделать нужны двойные круглые скобки здесь - внутренние, чтобы кортеж, наружные называть get
с этим кортежем в качестве его единственного аргумента), вы бы см. None
, вместо того, чтобы получить исключение, если не было такого комбинатора sim/dp как (0, 0).
Если вы можете отредактировать свой вопрос, чтобы уточнить свои спецификации (возможно, включая некоторые указания о том, как вы планируете использовать полученный контейнер, а также различные ключевые аспекты, перечисленные выше), я мог бы быть в состоянии для тонкой настройки этого совета, чтобы он соответствовал вашим потребностям и обстоятельствам намного лучше (и поэтому мог бы быть когда-либо другим ответчиком в отношении их собственного совета!), поэтому я настоятельно рекомендую вам это сделать - заблаговременно за помощь в том, чтобы помочь нам! -)
Это не просто питон форум, я добавил питона тег так нужные люди, скорее всего, чтобы увидеть ваш вопрос и изменил формат вверху, чтобы резюме было более информативным для людей, смотрящих на список всех вопросов. –