Rubyの配列操作をPythonで書くと?
こんにちは
最近rubyで書いたりpythonで書いたりを繰り返しており、頭の中がごちゃごちゃになりつつあります。 「この書き方pythonだとどうやるんだったっけ?」とか「あれ、これrubyの文法じゃねえpythonだ」みたいなのが増えてきたのでちょっと整理も兼ねてメモ程度に書いてみようかと思います。
部分配列
rubyの.slice
は[]
と同じ役割です。
# 宣言 pry(main)> x = (1..5).to_a => [1, 2, 3, 4, 5] # index0番から3番まで pry(main)> x[0..3] => [1, 2, 3, 4] pry(main)> x.slice(0..3) => [1, 2, 3, 4] # index1番から3個 pry(main)> x[1, 3] => [2, 3, 4] pry(main)> x.slice(1, 3) => [1, 2, 3] # index2番以降 pry(main)> x[2..-1] => [3, 4, 5]
pythonでは終了インデックスの次の数字まで指定します。
# 宣言 >>> x = range(1, 6) [1, 2, 3, 4, 5] # index0番から3番まで >>> x[0:4] [1, 2, 3, 4] # index1番から3個 >>> x[1:4] [2, 3, 4] # index2番以降 >> x[2:] [3, 4, 5]
include?
# 3が含まれているか pry(main)> x.include?(3) => true
# 3が含まれているか >>> 3 in x True
empty?
# 配列が空か pry(main)> x.empty? => false
# 配列が空か >>> len(x) == 0 False
map
# 配列内の要素を10倍にして返す pry(main)> x.map{ |item| item * 10 } => [10, 20, 30, 40, 50]
# 配列内の要素を10倍にして返す >>> map(lambda item:item*10, x) [10, 20, 30, 40, 50] # リスト内包表記 >>> [item * 10 for item in x] [10, 20, 30, 40, 50]
select
# 配列内の奇数を返す pry(main)> x.select{ |item| item % 2 != 0 } => [1, 3, 5]
# 配列内の要素を10倍にして返す >>> filter(lambda item:item%2!=0, x) [1, 3, 5] # リスト内包表記 >>> [item for item in x if (item % 2) != 0] [1, 3, 5]