Pythonでリストに偶数番目、奇数番目に値を放り込む方法

Pythonでリストに順番にではなく、つまりappendを使わない方法で、1つ空欄を置いて値を書き込んでいきたいと思った。実際に私が実践した方法をご紹介。

基本

方法

num = 100
array = ['null'] * num
a = 0
while num > 0:
	array[a] = 'value' + str(a)
	a += 2
	num -= 2
print(array)

2行目で、必要となると思われる数の配列を作成。配列の数だけwhileで回して、奇数番目に値を代入している。

結果

下記のようになる。

['value0', 'null', 'value2', 'null', 'value4', 'null', 'value6', 'null', 'value8', 'null', 'value10', 'null', 'value12', 'null', 'value14', 'null', 'value16', 'null', 'value18', 'null', 'value20', 'null', 'value22', 'null', 'value24', 'null', 'value26', 'null', 'value28', 'null', 'value30', 'null', 'value32', 'null', 'value34', 'null', 'value36', 'null', 'value38', 'null', 'value40', 'null', 'value42', 'null', 'value44', 'null', 'value46', 'null', 'value48', 'null', 'value50', 'null', 'value52', 'null', 'value54', 'null', 'value56', 'null', 'value58', 'null', 'value60', 'null', 'value62', 'null', 'value64', 'null', 'value66', 'null', 'value68', 'null', 'value70', 'null', 'value72', 'null', 'value74', 'null', 'value76', 'null', 'value78', 'null', 'value80', 'null', 'value82', 'null', 'value84', 'null', 'value86', 'null', 'value88', 'null', 'value90', 'null', 'value92', 'null', 'value94', 'null', 'value96', 'null', 'value98', 'null']

value0やvalue2がnullを1つ挟んでリストに書き込まれている。

実践

上記の方法を利用できる場合として、以下の状況で結果を得たい場合に用いることができると思う。

  • リストにどれほど多くの値を代入するかわからないが、ある程度の最大数は分かる
  • 2つのリストがあって、そのリストの個々の値を交互に1つのリストにしたい

方法

count = 100
set_value = 50
array = ['null'] * count
a = 0
num = set_value
while num > 0:
	array[a] = 'value' + str(a)
	a += 2
	num -= 2

a = 1
num = set_value
while num > 0:
	array[a] = str(a) + 'value'
	a += 2
	num -= 2

print(array)

「count」は、リストの最大数を指定。「set_value」は、実際に代入する値の最大数として想定。実際にどれほど入るかは状況によって異なる。その後は、奇数番目と偶数番目にそれぞれ別のリストをarrayリストに代入している。

結果

['value0', '1value', 'value2', '3value', 'value4', '5value', 'value6', '7value', 'value8', '9value', 'value10', '11value', 'value12', '13value', 'value14', '15value', 'value16', '17value', 'value18', '19value', 'value20', '21value', 'value22', '23value', 'value24', '25value', 'value26', '27value', 'value28', '29value', 'value30', '31value', 'value32', '33value', 'value34', '35value', 'value36', '37value', 'value38', '39value', 'value40', '41value', 'value42', '43value', 'value44', '45value', 'value46', '47value', 'value48', '49value', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null', 'null']

実は方法として紹介したものは、完璧なものではない。上記結果を見て分かるように、「49value」以降に入っている値がすべて「null」となっている。「null」は、きっと今後利用する際に邪魔になる。「null」を消すには、以下のように書いておく。

array = [i for i in array if i != 'null']

リストarrayに入っている値をiに順番に代入し、それに「null」が入っていない場合に、arrayに代入していくというもの。これにより下記のようになる。

['value0', '1value', 'value2', '3value', 'value4', '5value', 'value6', '7value', 'value8', '9value', 'value10', '11value', 'value12', '13value', 'value14', '15value', 'value16', '17value', 'value18', '19value', 'value20', '21value', 'value22', '23value', 'value24', '25value', 'value26', '27value', 'value28', '29value', 'value30', '31value', 'value32', '33value', 'value34', '35value', 'value36', '37value', 'value38', '39value', 'value40', '41value', 'value42', '43value', 'value44', '45value', 'value46', '47value', 'value48', '49value']

まとめ

使用する場面がかなり限られると思うが、リストをappendを使わずに作成する方法をご紹介した。もっと簡潔に書く方法がありそうな気がするので、もしあるのなら教えていただきたい。

共有する

このエントリーをはてなブックマークに追加

コメントをする

メールアドレスが公開されることはありません。
*のついている項目は必須です。


*