Python - "Структурные массивы" - PullRequest
19 голосов
/ 29 апреля 2011

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

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

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

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

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

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

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

Ответы [ 9 ]

15 голосов
/ 29 апреля 2011
14 голосов
/ 29 апреля 2011

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

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

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

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

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

5 голосов
/ 29 апреля 2011

Как насчет списка диктов?

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'}
 ...]
3 голосов
/ 29 апреля 2011

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

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

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

2 голосов
/ 29 апреля 2011

Практически во всех случаях список 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's 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

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

0 голосов
/ 10 октября 2016

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

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 
0 голосов
/ 29 апреля 2011
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"))
0 голосов
/ 29 апреля 2011
>>> s = [{'name': 'foo', 'place': 'shop'}, {'name': 'bar', 'place': 'home'}]
>>> s[0]['name']
'foo'

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

0 голосов
/ 29 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...