Pythonでリストから最初の空でない文字列を取得する方法
文字列のリストが与えられたとき、その中から最初の空でない(非空)要素を取得したいケースはよくあります。課題となるのは、リストの先頭に空文字列が1つ、2つ、あるいはそれ以上連続して存在している可能性がある点です。ここでは、そうした状況でも動的に最初の空でない文字列を見つけ出す方法を2つ紹介します。
next()関数を使う方法
next()関数をジェネレータ式と組み合わせると、現在の要素が空の場合に自動的に次の要素へと処理を進められます。条件if subにより空文字列はスキップされ、最初に真と評価された要素が返されます。
サンプルコード
listA = ['', 'top', 'pot', 'hot', ' ', 'shot']
# 対象のリスト
print("Given list:\n ", listA)
# next()を使用
res = next(sub for sub in listA if sub)
# 結果を出力
print("The first non empty string is : \n", res)
実行結果
上記のコードを実行すると、次のような結果が得られます。
Given list: ['', 'top', 'pot', 'hot', ' ', 'shot'] The first non empty string is : top
なお、リスト内のすべての要素が空だった場合に備えて、next()の第2引数にデフォルト値を指定しておくと安全です。
res = next((sub for sub in listA if sub), None)
filter()を使う方法
filter()関数を使っても同じ結果が得られます。filter(None, リスト)とすると、空文字列などの偽(falsy)と評価される値がすべて除外され、残った要素の中から最初のものを取り出せば目的の値が得られます。
ただし、この書き方はPython 2でのみ有効である点に注意してください。Python 3ではfilter()がイテレータを返すため、[0]によるインデックスアクセスができません。Python 3で同様の処理を行う場合は、以下のようにnext()と組み合わせます。
res = next(filter(None, listA))
サンプルコード(Python 2)
listA = ['', 'top', 'pot', 'hot', ' ', 'shot']
# 対象のリスト
print("Given list:\n ", listA)
# filter()を使用
res = filter(None, listA)[0]
# 結果を出力
print("The first non empty string is : \n", res)
実行結果
上記のコードを実行すると、次のような結果が得られます。
Given list: ['', 'top', 'pot', 'hot', ' ', 'shot'] The first non empty string is : top
まとめ
どちらの方法でも、先頭に空文字列がいくつ連続していても、最初の空でない文字列を正しく取得できます。Python 3以降を利用する場合はnext()とジェネレータ式を組み合わせる方法が最もシンプルで推奨されるアプローチです。
-
Pythonで文字列内の単語を逆順に並べ替える方法
Pythonでは、split()メソッドとreversed()関数を組み合わせることで、文字列内のすべての単語を簡単に逆順にすることができます。この記事では、具体的な手順とサンプルコードを通じて、その実装方法を解説します。 やりたいこと まず、入力と出力のイメージをサンプルで確認しましょう。 入力: string = I am a python programmer 出力: programmer python a am I 別の例も見てみます。 入力: string = tutorialspoint is a educational website 出力: website educatio
-
【Python入門】リストを文字列に変換する4つの方法を徹底解説
本記事では、Pythonでリスト(list)型のデータを文字列(string)型に変換する方法について、代表的な4つのアプローチをサンプルコードとともにわかりやすく解説します。 問題設定 与えられたリストを、ひとつながりの文字列に変換することを目標とします。例えば、複数の文字列要素を持つリストを結合して、単一の文字列として扱いたいケースなどが該当します。 ここでは、以下の4つの異なるアプローチを順番に見ていきましょう。 方法1: 空の文字列への連結(forループ) 最も基本的な方法は、空の文字列を用意し、forループでリストの各要素を順番に連結していくやり方です。処理の流れが直感的で、初心者