1. 程式人生 > 實用技巧 >一行Python程式碼實現for迴圈和if else判斷

一行Python程式碼實現for迴圈和if else判斷

Outline

平時寫if判斷和for迴圈都是中規中矩,按常規套路來,但今天同事問我這方面的東西給;

把他for迴圈+if else判斷改成了一行。

改完之後程式碼看起來更優雅了 哈哈哈

需求

假設有這麼個需求:

判斷一個可迭代物件中的元素是否以字母 “s” 結尾;

  1. 以 “s” 結尾,則保留這個元素
  2. 不以 “s” 結尾,則把這個元素替換為 666

實現

首先要for迴圈遍歷這個可迭代物件,然後對每次迭代的元素進行判斷,看是否以“s”結尾;

常規解法:

def is_endwith_s(n):
    """
    判斷是否以s結尾
    :param n: str or int
    :return: bool
    
""" return str(n).endswith('s') # 待判斷的可迭代物件 lis = ['ss', 'ss', 'ss', 'aa', 'aa', 'ss', 'ss', 'ss', 'ss', '22'] lis_s = [] for i in lis: if is_endwith_s(i): lis_s.append(i) print(lis_s) # ['ss', 'ss', 'ss', 'ss', 'ss', 'ss', 'ss']
保留以s結尾的
def is_endwith_s(n):
    """
    判斷是否以s結尾
    :param n: str or int
    :return: bool
    
""" return str(n).endswith('s') # 待判斷的可迭代物件 lis = ['ss', 'ss', 'ss', 'aa', 'aa', 'ss', 'ss', 'ss', 'ss', '22'] lis_s = [] for i in lis: if is_endwith_s(i): lis_s.append(i) else: lis_s.append(666) print(lis_s) # ['ss', 'ss', 'ss', 666, 666, 'ss', 'ss', 'ss', 'ss', 666]
保留以s結尾的,不是s結尾替換為66

for迴圈+ if else 一行實現:

def is_endwith_s(n):
    """
    判斷是否以s結尾
    :param n: str or int
    :return: bool
    """
    return str(n).endswith('s')


# 待判斷的可迭代物件
lis = ['ss', 'ss', 'ss', 'aa', 'aa', 'ss', 'ss', 'ss', 'ss', '22']

lis_s = [word for word in lis if is_endwith_s(word)]
print(lis_s)



# ['ss', 'ss', 'ss', 'ss', 'ss', 'ss', 'ss']
保留以s結尾的
def is_endwith_s(n):
    """
    判斷是否以s結尾
    :param n: str or int
    :return: bool
    """
    return str(n).endswith('s')


# 待判斷的可迭代物件
lis = ['ss', 'ss', 'ss', 'aa', 'aa', 'ss', 'ss', 'ss', 'ss', '22']

lis_s = [word if is_endwith_s(word) else '666' for word in lis]

print(lis_s)


# ['ss', 'ss', 'ss', '666', '666', 'ss', 'ss', 'ss', 'ss', '666']
保留以s結尾的,不是s結尾替換為666