Pythonでリスト内の奇数要素を2回繰り返して追加する方法
この記事では、奇数を要素として含むリストを受け取り、その奇数要素を同じリストの中で繰り返し(2回)追加する方法を解説します。例えば、ある奇数がリスト内に2回出現している場合、処理後にはその奇数が4回出現することになります。
この要件を実現するアプローチは複数あります。代表的なのは、forループとin条件を組み合わせる方法や、itertoolsモジュールを活用する方法です。なお、要素が奇数かどうかの判定は、各要素を2で割った余りを確認することで行います。
実装例
from itertools import chain
import numpy as np
data_1 = [2,11,5,24,5]
data_2=[-1,-2,-9,-12]
data_3= [27/3,49/7,25/5]
odd_repeat_element_3=[]
# forとinを使用する方法
odd_repeat_element = [values for i in data_1 for values in (i, )*(i % 2 + 1)]
print('与えられた入力値:', data_1)
print('奇数を繰り返したリスト:', odd_repeat_element)
# itertoolsのchainを使用する方法
odd_repeat_element_2 = list(chain.from_iterable([n]
if n % 2 == 0 else [n]*2 for n in data_2))
print('\n与えられた入力値:', data_2)
print('奇数を繰り返したリスト:', odd_repeat_element_2)
# numpyのrepeatとextendを使用する方法
for m in data_3:
(odd_repeat_element_3.extend(np.repeat(m, 2, axis = 0))
if m % 2 == 1 else odd_repeat_element_3.append(m))
print('\n与えられた入力値:', data_3)
print('奇数を繰り返したリスト:', odd_repeat_element_3)
上記のコードを実行すると、次のような出力が得られます。
与えられた入力値: [2, 11, 5, 24, 5] 奇数を繰り返したリスト: [2, 11, 11, 5, 5, 24, 5, 5] 与えられた入力値: [-1, -2, -9, -12] 奇数を繰り返したリスト: [-1, -1, -2, -9, -9, -12] 与えられた入力値: [9.0, 7.0, 5.0] 奇数を繰り返したリスト: [9.0, 9.0, 7.0, 7.0, 5.0, 5.0]
各手法のポイント
1. リスト内包表記とタプルの繰り返し
(i, ) * (i % 2 + 1) の部分がポイントです。i が奇数の場合、i % 2 + 1 は 2 になるためタプル (i,) が2回繰り返されます。一方、偶数の場合は 1 になるため、要素はそのまま1回だけ現れます。
2. itertools.chain.from_iterable を使う方法
各要素 n に対して、偶数なら [n]、奇数なら [n] * 2 を生成し、chain.from_iterable() でそれらを連結・平坦化して、1つのリストにまとめています。
3. numpy.repeat と extend を使う方法
要素が奇数の場合は np.repeat(m, 2) で2回繰り返した配列を作成し、extend() でリストへ追加します。偶数の場合は append() を使って、そのまま1つだけ追加します。
-
Pythonのappend()とextend()の違いをわかりやすく解説
Pythonのリストに要素を追加する際によく使われるメソッドが append() と extend() です。どちらもリストの要素数を増やすために使用しますが、動作は大きく異なります。この記事では、それぞれの特徴と違いを具体例とともに解説します。 append()メソッドとは append() は、渡された要素をリストの末尾に「1つの要素」として追加します。引数として渡せるのは1つだけです。仮に引数がリストであっても、そのリスト全体が「1つの要素」として元のリストに加わり、要素数は1だけ増えます。 構文: list_name.append(値) ※ 引数は1つのみ append()の使用
-
Pythonのループでリストに値を追加・代入する方法【append()活用】
Pythonのループを使ってリストに値を追加する方法 Pythonの組み込みクラスであるlistには、要素を末尾に追加するためのappend()メソッドが用意されています。このメソッドとinput()関数、さらに無限ループ(while True)を組み合わせることで、ユーザーが入力した値を次々とリストに格納することができます。 以下のサンプルコードでは、ユーザーが何も入力せずにEnterキーを押すまで、繰り返し項目の入力を受け付け、その都度リストへ追加していきます。 L = [] while True: item = input(新しい項目を入力してください: ) if ite