web-dev-qa-db-ja.com

Python-"構造体配列"

テキストファイルで見つけたすべての行に構造体が欲しいのですが。 (つまり、基本的には、構造体を定義してから、行を数え、構造体を埋めたいです。)

C++、C#では問題ありません。しかし、私は常にPythonで迷っています。

私の構造体は次のようになります:

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

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

等々。
(足りない質問で申し訳ありません。他の初心者(私のような)が役に立てば幸いです。)

もちろん、実物を反映するように質問(タイトル)を自由に編集してください。

21
Apache
15
S.Lott

nameおよびplaceフィールドを含む class を作成するとします。

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"))

参照: classes(from Python tutorial)

16
Matt Ball

辞書のリストはどうですか?

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'}
 ...]
5
Tim Pietzcker

IItは、データとして何を持っているかに依存します。

名前と場所を文字列として保存するだけの場合は、次のことをお勧めします。

名前付きタプルのリスト[(name="foo", place="Shop"), (name="bar", place="Home")]

3
Xavier V.

ほとんどすべての場合で、PythonリストはC配列に似ています。Pythonにはarrayモジュールがありますが、これは薄いラッパーです実際のC配列の周りにあるので、Cとの間で何かを公開する必要がない限り、それを使用しません。

また、構造体はオブジェクトとして簡単に表現できます。何かのようなもの:

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

次に、ファイルを1行ずつループして、次のように入力します。

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

これは、あなたを動かし、基本的なファイル/クラス/リスト操作を行う方法を理解するのに役立つ出発点として十分です。

3
Nick Presta

辞書を使うか、少人数のクラスを作ることができます。

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

また、pythonは、pythonモジュールであるため、「struct」という名前を付けないことをお勧めします。

0
kanaka

なぜそんなに苦労するのかわからない

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
Priyank Pathak
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
vichle