PythonでUnderscore.jsのような配列操作

PythonでUnderscore.jsのような配列操作:

JavaScriptで書いてると、Underscore.jsがとても便利でしてな(´・ω・`)

Pythonで配列操作やろうとした時に迷うことが多いので、自分用に対応表を作っておくことにしました。いいやり方見つけるたびにアップデートしていこうと思います。

基本的な配列操作(append/insert/pop/extend/+/*/スライス)は省略。


対応表

Underscore.js Python 結果(Python) 動作
_.indexOf([1, 2, 3], 2) [1, 2, 3].index(2) 1 配列のどこにあるかインデックスを返す。なければ-1
_.lastIndexOf([1, 2, 3, 2], 2) (lambda array, val: len(array)-1 - array[::-1].index(val))([1, 2, 3, 2], 2) 3 配列の後ろから検索してindexを返す。なければ-1。Python版は逆順配列を新たに作るので巨大な配列には使用しない
_.find([1, 2, 3], (val)=>{ return val == 2; }) next((val for val in [1, 2, 3] if val == 2), None) 2 配列の中に条件の合う値が存在すればそれを返す。無ければundefined/None
_.contains([1, 2, 3], 2) 2 in [1, 2, 3] True 配列に含まれるかどうかbooleanで返す
_.every([1, 2, 3], (val)=>{ return val < 10; }) all(val < 10 for val in [1, 2, 3]) True 配列の内容が全て条件に当てはまるか
_.some([1, 2, 3], (val)=>{ return val < 2; }) any(val < 2 for val in [1, 2, 3]) True 配列の内容が1つでも条件に当てはまるか
_.filter([1, 2, 3], (val)=>{ return val%2 != 0; }) [val for val in [1, 2, 3] if val%2 != 0] [1, 3] 条件に一致した値だけ抜き出す
_.map([1, 2, 3], (val)=>{ return val+1; }) [val+1 for val in [1, 2, 3]] [2, 3, 4] 配列の値を加工した新たな配列を作る
_.uniq([1, 2, 3, 2, 1]) list(set([1, 2, 3, 2, 1])) [1, 2, 3] 重複を取り除く(※Pythonは順不同)
_.difference([1, 2, 3, 4, 5], [5, 2, 10]) [val for val in [1, 2, 3, 4, 5] if val not in list(set([5, 2, 10]))] [1, 3, 4] 別の配列に存在しない値だけを返す
_.zip([1, 2], ["a", "b"], [true, false]) list(zip([1, 2], ["a", "b"], [True, False])) [(1, 'a', True), (2, 'b', False)] 各配列の先頭要素から順番にグルーピングして1つの配列に
_.unzip([[1, 'a', true], [2, 'b', false]]) list(zip(*[[1, 'a', True], [2, 'b', False]])) [(1, 2), ('a', 'b'), (True, False)] zipの逆動作。配列をバラして各グループでzipしなおす

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)