0
0

構造体の整列

Posted at

指定されたアルゴリズムの問題は解けたので構造体に戻ります。
構造体の整列から。

class Member():
    def __init__(self, name, old, birth, state):
        self.name = name
        self.old = old
        self.birth = birth
        self.state = state
    

        
#main
N = int(input())
members =[]

for _ in range(N):
    member = Member(*input().split())
    members.append(member)
    

#sort members[1]=oldに注目してソート
members.sort(reverse=False, key=lambda x:x[1])

for i in range(N):
    print(members[i].name,members[i].old,members[i].birth,members[i].state)

とここまでかけたんですが、ソートの仕方が間違っているようでエラーに。

Traceback (most recent call last):
  File "Main.py", line 19, in <module>
    members.sort(reverse=False, key=lambda x:x[1])
  File "Main.py", line 19, in <lambda>
    members.sort(reverse=False, key=lambda x:x[1])
TypeError: 'Member' object is not subscriptable

なぜかなと思ったんですが、添字が間違っていたようで。

class Member():
    def __init__(self, name, old, birth, state):
        self.name = name
        self.old = old
        self.birth = birth
        self.state = state
    

        
#main
N = int(input())
members =[]

for _ in range(N):
    member = Member(*input().split())
    members.append(member)
    

#sort membersのoldに注目してソート
members.sort(reverse=False, key=lambda x:x.old)

for i in range(N):
    print(members[i].name,members[i].old,members[i].birth,members[i].state)

これでいけました。
で、回答を見たんですが、上のラムダ式を使わない方法。
これ、多分選択ソートですね。
アルゴリズムの勉強したのが早速役に立ったようです。

class Member():
    def __init__(self, name, old, birth, state):
        self.name = name
        self.old = old
        self.birth = birth
        self.state = state
    

        
#main
N = int(input())
members =[]

for _ in range(N):
    member = Member(*input().split())
    members.append(member)
    

#sort membersのoldに注目してソート
#左端から右端まで
for i in range(N):
    #左端+1番めから右端まで
    for j in range(i+1, N):
        #左端の要素と比較して小さかったらスワップ
        if members[i].old > members[j].old:
            members[i], members[j] = members[j], members[i]

for i in range(N):
    print(members[i].name,members[i].old,members[i].birth,members[i].state)



0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0