最近仕事でPythonを扱うことがあって、今までPythonは名前はきいてたけど、中身には全く触れてきてなかったので勉強中。
いろいろ見ていくうちに、Youtube で動画を公開している「Python Vtuber サプー」さんの動画が一つ一つ細かくまとまっていてわかりやすかった。
てきとーに思いついたことを考えもせずに書いてしまうだらしなくも切ない日々的記録
最近仕事でPythonを扱うことがあって、今までPythonは名前はきいてたけど、中身には全く触れてきてなかったので勉強中。
いろいろ見ていくうちに、Youtube で動画を公開している「Python Vtuber サプー」さんの動画が一つ一つ細かくまとまっていてわかりやすかった。
まだサンプルプログラムをぽちぽちいじっている程度の初心者の初の字くらいですが、Python をちょこっと使ってます。
Python の環境は Homebrew で pyenv をインストールし pyenv を使って新しいバージョンの Python をインストールしていました。
[ 【2020.8最新】Pythonのインストール法 – Qiita]
が、ふと思って Pythonのバージョンを確認してみるといつの間にか、システム初期バージョンの 2.7.16 に戻ってました。
原因は何かなーと調べてたら、これまた Qiita でまとめらてた記事を発見。
[ pyenvを使ってpythonのバージョンが変更できない時の原因 – Qiita ]
原因としては Python のコマンドパスが変更になっていないことでした。
$ eval "$(pyenv init -)"
でも、.zshrc には記載してるんだけどなー。
$ cat .zshrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
シェルを再起動すると元に戻ってしまう。
$ eval "$(pyenv init -)"
$ python --version
Python 3.8.5
$ exec $SHELL -l
$ python --version
Python 2.7.16
またあれこれ調べてたら、これまた Qiita で Python 環境を作成している記事が参考になりました。
[ MacOS CatalinaにPythonとPython向けライブラリをインストールする – Qiita ]
pyenv自体はこれで動作しますが、ターミナルにpyenvの設定を追加しないとpyenv経由でインストールしたPythonが認識されないので、下記のコマンドでターミナルに設定を追加、追加した設定をターミナルに認識させます。
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
$ source .zshrc
もちろんvimで直接プロファイル等に書き込んでも問題ありません。
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
んー、pyenv の何をもとに条件分岐をしてるのかさっぱりわからないが、とりあえず上記分岐文 .zshrc に追記することでPythonは pyenv で global 指定したバージョンを使うようになりました。
Excelやスプレッドシートで特定の値をキーにしてデータを抽出する方法として vlookup 関数が有名ですが、vlookup関数の一番の弱点は
「検索キーのリストが一番左側にないとダメ」
ってところです。
vlookup / hlookup 関数の後継関数として xlookup 関数が発表されていますが、現状使える環境はごく一部のテストユーザー向けです。
Microsoft、新しいExcel関数「XLOOKUP」を発表 ~「VLOOKUP」や「HLOOKUP」の後継 – 窓の杜
既存関数の index 関数 と match 関数 でvlookup 関数の弱点を克服した使い方ができますので、覚えておいて損はないと思います。
結論から先に 使い方は
=index("[抽出したいデータの範囲]", match("[検索キー]", "[キーを検索する範囲]", 0))
です。
それぞれの関数の詳細な説明は省きますが、match関数で、検索キーがある行番号を取得して、index関数で取得した行番号に対応するデータを返すといった動きになります。
vloock関数のように、検索キーの場所を選ばないし、取得する列の順番を数える必要もありません。
抽出したいデータ範囲とキーを検索する範囲をそれぞれ名前を付けて、それ上部の式に当てはめればサクっとデータ抽出ができると思います。
PHP7.2にして、Wordpressを動かして見ると、
count(): Parameter must be an array or an object that implements Countable in …(ファイルパス)/wp-includes/post-template.php on line 284
なワーニングメッセージが。
調べてみるとPHP7.2 になって count関数 が変わった模様。
PHP 公式マニュアル
バージョン 説明
7.2.0 count() will now yield a warning on invalid countable types passed to the array_or_countable parameter.
引数が配列かカウントできるオブジェクトじゃないとワーニングを出しますよー。
ってことになったらしい。
で、件の post-template.php では
if ( $page > count( $pages ) ) // if the requested page doesn't exist $page = count( $pages ); // give them the highest numbered page that DOES exist
と $pages がどんなオブジェクトがわからないまま、count関数の引数に使われているのでワーニングが出た模様。
$pages が空(NULL)の場合にワーニングが出るので、count関数を使う前に$pagesが空かどうかのチェックを入れればOK。
空の場合は0を入れてあげます。
if ( ! empty( $pages )) { if ( $page > count( $pages ) ) // if the requested page doesn't exist $page = count( $pages ); // give them the highest numbered page that DOES exist } else { $page = 0; }
コンピュータプログラムの世界では 空(NULL) = 0 かどうかか環境依存だったりするので、ややこしいですね。
ひとまず該当箇所を修正して、ファイルを上書きすればワーニングは出なくなります。
エクセル等でデータ編集等をする時に、一つ上のセルの値を参照することは多々あります。
ただ、イコールで値を参照した際には途中で行の挿入・削除を行うと参照元がずれて大変なことになります。
挿入・削除に影響されない、常に一つ上のセルの値を取得するメモ
=INDIRECT(ADDRESS(ROW()-1,COLUMN()))
ExcelやGoogle スプレッドシートでも動作します。