Подтвердить что ты не робот

Python - "Структурные массивы"

Я хочу иметь структуру для каждой строки, которую я нахожу в текстовом файле. (Итак, да, в основном я хочу определить свою структуру, затем подсчитать строки и заполнить свои структуры.)

В С++ С# это нормально. Но я всегда теряюсь в Python.

Мои структуры выглядели бы так:

struct[0].name = "foo"  
struct[0].place = "Shop"  

struct[1].name = "bar"  
struct[1].place = "Home"  

И так далее. (Извините за хромой вопрос, надеюсь, что другие новички (например, я) найдут это полезным.)

Конечно, не стесняйтесь редактировать вопрос (заголовок), чтобы отразить реальную вещь.

4b9b3361

Ответ 2

Вы хотите создать class, который содержит поля name и place.

class Baz():
    "Stores name and place pairs"
    def __init__(self, name, place):
        self.name = name
        self.place = place

Затем вы будете использовать list экземпляров этого класса.

my_foos = []
my_foos.append(Baz("foo", "Shop"))
my_foos.append(Baz("bar", "Home"))

Смотрите также: классы (из учебника Python).

Ответ 3

Как насчет списка dicts?

mydictlist = [{"name":"foo", "place":"Shop"},
              {"name":"bar", "place":"Home"}]

Затем вы можете сделать

>>> mydictlist[0]["name"]
'foo'
>>> mydictlist[1]["place"]
'Home'

и т.д.

Используя ваш файл образца:

mydictlist = []
with open("test.txt") as f:
    for line in f:
        entries = line.strip().split(" ", 5) # split along spaces max. 5 times
        mydictlist.append({"name": entries[0],
                           "time1": entries[1],
                           "time2": entries[2],
                           "etc": entries[5]})

дает вам:

[{'etc': 'Vizfoldrajz EA eloadas 1', 'name': 'Hetfo', 'time2': '10:00', 'time1': '8:00'}, 
 {'etc': 'Termeszetfoldrajzi szintezis EA eloadas 1', 'name': 'Hetfo', 'time2': '14:00', 'time1': '12:00'}, 
 {'etc': 'Scriptnyelvek eloadas 1', 'name': 'Hetfo', 'time2': '16:00', 'time1': '14:00'}
 ...]

Ответ 4

IIt зависит от того, что у вас есть в качестве данных.

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

Список названных элементов [(name="foo", place="Shop"), (name="bar", place="Home")]

Ответ 5

Для почти всех случаев список Python аналогичен массиву C. Python имеет модуль array, но это тонкая оболочка вокруг реальных массивов C, поэтому я бы не использовал это, если вам не нужно выставлять что-то в/из C.

Кроме того, структура может быть легко представлена ​​как объект. Что-то вроде:

class Data(object):
    def __init__(self, name, place):
        self.name = name
        self.place = place

Затем вы хотите прокрутить файл по строкам и заполнить:

my_list = []
with open("myfile.txt") as f:
    for line in f.readlines():
        # line is each line in the file
        # let pretend our file structure is "NAME PLACE"
        data = line.split() # data[0] = name, data[1] = place
        my_list.append(Data(data[0], data[1]))

# my_list now contains objects of class Data, which has members name and place

Это должно быть достаточно отправной точки, чтобы заставить вас двигаться и помочь вам понять, как выполнять основные операции с файлом/классом/списком.

Ответ 6

Вы можете использовать dict или сделать небольшой класс.

Ответ 7

>>> s = [{'name': 'foo', 'place': 'shop'}, {'name': 'bar', 'place': 'home'}]
>>> s[0]['name']
'foo'

Кроме того, я бы рекомендовал не называть его "struct" в python, так как это модуль python.

Ответ 8

class Struct:
   def __init__(self, name, place):
      self.name = name
      self.place = place

structs = []
structs.append(Struct("foo","bar"))
structs.append(Struct("other_foo","other_bar"))

Ответ 9

Не понимаю, почему так много боли.

class your_struct():

def __init__(self, value, string):
    self.num = value
    self.string = string

C = [[ your_struct(0,'priyank') for j in range(len(n)) ] for i in                 
     range(len(n)) ]
   # for 2-D Matrix

C = [ your_struct(0,'priyank') for j in range(len(n)) ]  // for 1-D array