一行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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM