Ответ 1
То, что назвали кортежи для.
Я хочу иметь структуру для каждой строки, которую я нахожу в текстовом файле. (Итак, да, в основном я хочу определить свою структуру, затем подсчитать строки и заполнить свои структуры.)
В С++ С# это нормально. Но я всегда теряюсь в Python.
Мои структуры выглядели бы так:
struct[0].name = "foo"
struct[0].place = "Shop"
struct[1].name = "bar"
struct[1].place = "Home"
И так далее. (Извините за хромой вопрос, надеюсь, что другие новички (например, я) найдут это полезным.)
Конечно, не стесняйтесь редактировать вопрос (заголовок), чтобы отразить реальную вещь.
То, что назвали кортежи для.
Вы хотите создать 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).
Как насчет списка 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'}
...]
IIt зависит от того, что у вас есть в качестве данных.
Если все, что вы хотите, это хранить имена и места в виде строки, я бы предложил:
Список названных элементов [(name="foo", place="Shop"), (name="bar", place="Home")]
Для почти всех случаев список 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
Это должно быть достаточно отправной точки, чтобы заставить вас двигаться и помочь вам понять, как выполнять основные операции с файлом/классом/списком.
Вы можете использовать dict или сделать небольшой класс.
>>> s = [{'name': 'foo', 'place': 'shop'}, {'name': 'bar', 'place': 'home'}]
>>> s[0]['name']
'foo'
Кроме того, я бы рекомендовал не называть его "struct" в python, так как это модуль python.
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"))
Не понимаю, почему так много боли.
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