LoginSignup
1
1

More than 3 years have passed since last update.

【python】if文を1一文で書く方法。

Last updated at Posted at 2020-06-05

【python】if文を1一文で書く方法。

if else文は一文で書くことができる。

式(Trueで実行) if 条件式 else 式(falseで実行)

公式ページ
「x if C else y」 という式は最初に条件 x ではなく C を評価します。
C が true の場合 x が評価され値が返されます。
それ以外の場合には y が評価され返されます。

通常のif文
a=5
if a<5:
 i*5
else:
  i*2
一文で書く
a=5
i*5 if a<5 else i*2

▼応用
@shiracamusさんに教えてもらった記述の中身を紐解いてみる。

def gradingStudents(grades):
    return [grade + (0 if grade < 38 or grade % 5 < 3 else -grade % 5)
           for grade in grades]


if __name__ == '__main__':
    grades_count = int(input().strip())
    grades = [int(input().strip()) for _ in range(grades_count)]
    result = gradingStudents(grades)
    print(*result, sep='\n')

▼if文を一列で書く

「0 if grade < 38 or grade % 5 < 3 else -grade % 5」

38未満かつ、5で割った余りが3以下なら0。(True)
Falseなら、マイナス値を5で割った余りを算出。

▼マイナスの余り

「-5%3」のようにマイナスの値を割った場合の余り。
必ずプラスの整数になる

-x%y
商はマイナス。
余りは 0<=余り<y

「-5%3」の場合、商:-2, 余り:1
余り=3*(-2)-5=1

内包表記

・for文を一文で書く記述。
[式 for 変数 in イテラブル] 
 └ 出力はlist

・return [内包表記]
 └ returnが実行されるのは内包表記の処理が全部終わってから。



まとめると、

  1. 内包表記でgradeに入っている要素を一つづつ取り出す。
  2. if文でgradeに足す値を決定する。
  3. 要素の数だけ繰り返す
  4. 「grade + 0 or 余り」の値をリスト化
  5. returnで返す。


if文の一文表記と内包表記を使ったプログラムの例

2つの文字列を比較して、同じ文字が含まれているかを調べる。

s1,s2="h","world"

def twoStrings(s1, s2):
    return "YES" if sum([s2.count(i) for i in set(s1)]) else "NO"

twoStrings(s1, s2)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1