よーぐるとのブログ

技術ネタを中心。私的なことを徒然と綴っていきます。

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]