配列の要素から文字列検索
普通のやり方
str_match = [s for s in my_list if "ack" in s]
print(str_match)
__contains__を使ったやり方
str_match = [s for s in my_list if s.__contains__("ack")]
print(str_match)
文字列が持つ特殊メソッド
文字列.__contains__("検索したい文字列)
でブール値を返す
辞書の操作
リスト二つからzipを使って生成できる
a=["john","tanaka","hanako"]
b=[132,23,23]di=dict(zip(a,b))
print(di)
>>>
{'john': 132, 'tanaka': 23, 'hanako': 23}
for文と辞書に関して
辞書のテンプレ。keyは文字列
d = {'key1': 1, 'key2': 2, 'key3': 3}
for i in d:
とするとiはkeyになる。
for i in d.key()としてもおなじ
for i in d.value()とすると値のほうが返ってくる
for i,j in d.items()とするとenumerateみたいになる。
{'john': 132, 'tanaka': 23, 'hanako': 23}
<class 'dict'>
dict_items([('john', 132), ('tanaka', 23), ('hanako', 23)])
<class 'dict_items'>
dictにitems()メソッドをかけるとdict_itemsクラスという別の何かになる。
これをlist()でリスト化できる。
キーだけのリストにしたいときはkey()をかけてからlist()
値だけのリストにしたいときはvalue()をかけてからlist()
で対応可能。
辞書版「append()」
update()メソッドで辞書を追加できる
di= di.update(di2)
Rubyのクラス変数とインスタンス変数
class Greeting
def setName(name = "Ruby")
@name = name #引数をインスタンス変数@nameに設定
end
def hello
print "Hello ", @name,"\n" #変数@nameは他のメソッドからでも参照可能
end
end
g1 = Greeting.new #オブジェクトg1を生成
g1.setName("Taro") #g1に名前を設定
g2 = Greeting.new #オブジェクトg2を生成
g2.setName("Jiro") #g2に名前を設定
g1.hello
g2.hello
g3=Greeting.new()
g3.setName()
g3.hello()
name="Ruby"と初めから入っているのは入力しなかったときはデフォルトの値を使うという意味。
@name=nameがself.name=nameに対応する。
self.hogeは同じクラス内の違うメソッド間でも共有される
@の数覚える
Rubyでコンストラクタ
class MyClass
def initialize
puts "init"end
end
def initializeと書く
Rubyのfor文
FuzzBizz
for i in 1..100
if i % 15 == 0
print "FizzBuzz\s"
print "\n"
elsif i % 5 == 0
print "Buzz\s"
print "\n"
elsif i % 3 == 0
print "Fizz\s"
print "\n"
else
print i , "\s"
print "\n"
end
end
pythonとの比較
for i in までは同じ
pythonの場合inの後にイテラブルが来るが1..100とか書いてある。点二つであることに注意する。
ifの終わりとforの終わりにインデントそろえたendが必要であることと、ifの末尾に:が必要ないことに注意する。
MATLABクラス 銀行口座クラスの例
クラスの開発 - 一般的なワークフロー - MATLAB & Simulink - MathWorks 日本
methodsfunction BA = BankAccount(AccountNumber, InitialBalance)BA.AccountNumber=AccountNumberBA.AccountBalance=InitialBalanceBA.AccountListerner=AccountManager.addAccount(BA);end
ファイル名と同じ名前のメソッドはコンストラクタ。
function self = function_name(引数 , 引数,,,)
self.hoge = 引数
self.hoge = 引数
というパターンになるはず。
properties(SetAccess = private)AccountNumberAccountBalanceend
マトラボでいうプロパティはパイソンでいうインスタンス変数のこと。
アクセスできるできないのパイソンでいう__をSetAccessで設定する。
パイソンと違うのは宣言が必要なところでpropertiesでは宣言だけをする。
コンストラクタでのちに代入していく。
methods (Static)
パイソンと同じでインスタンスの生成が必要ないものをスタティックメソッドという。
BA = BankAccount(1234567,500)BA = BankAccount with properties: AccountNumber: 1234567 AccountBalance: 500 AccountListener: [1x1 event.listener]
パイソンと同じくインスタンスの生成。
getStatement(BA)------------------------- Account: 1234567 CurrentBalance: 500.00 Account Status: open -------------------------
これはコマンドラインからメソッドを呼んでいる。スクリプトの中で呼ぶときはどうすればいい?function getStatement(BA) disp('-------------------------') disp(['Account: ',num2str(BA.AccountNumber)]) ab = sprintf('%0.2f',BA.AccountBalance); disp(['CurrentBalance: ',ab]) disp(['Account Status: ',BA.AccountStatus]) disp('-------------------------') end