読者です 読者をやめる 読者になる 読者になる

Pythonで複数の値を複数の変数に同時に代入する

PHPでは見慣れない感じでしたのでメモとして残します。

左辺に複数の変数、右辺に同数の値を記載して代入

a, b = 1, 2

print(a)
# 1

print(b)
# 2

これはタプルのパックとシーケンスのアンパックを組み合わせたものとのことです。
http://docs.python.jp/2/tutorial/datastructures.html#tuples-and-sequences
http://docs.python.jp/3/tutorial/datastructures.html#tuples-and-sequences

PHPで似たようなことをしようとすると、

<?php
list($a, $b) = [1, 2];

echo $a;
// 1

echo $b;
// 2

※複数の値を配列として返すfunctionからの返り値を受け取る場合などに利用できるかと思われます。

配列の途中の値をまとめて置き換え

スライスで行えます。

v = range(1, 10)
print(v)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

v[1:6] = ['a'] * 5
print(v)
# [1, 'a', 'a', 'a', 'a', 'a', 7, 8, 9]

v[1:6]:の左側のoffset以上:の右側のoffset未満と覚えることにします。

PHPで行うと、

<?php
$v = range(1, 9);
print_r($v);
/*
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
)
*/

array_splice($v, 1, 5, array_fill(0, 5, 'a'));
print_r($v);
/*
Array
(
    [0] => 1
    [1] => a
    [2] => a
    [3] => a
    [4] => a
    [5] => a
    [6] => 7
    [7] => 8
    [8] => 9
)
*/

array_spliceの第1引数で指定する配列はリファレンス渡しになるので渡した配列そのものが書き換えられます。