【问题标题】:Getting the last 3 letters in a list of strings获取字符串列表中的最后 3 个字母
【发布时间】:2018-03-14 03:33:05
【问题描述】:

举个例子:

def get_last_three_letters(a_list):
    for name in a_list:
        name = name[-3:].lower()

    return name

def main():
   print("1.", get_last_three_letters(["Jess", "Cain", "Amity", "Raeann"]))
   print("2.", get_last_three_letters(["CAIn", "JessiE", "O", "ROBERT", 
   "Geoffrey", "Li", "B"]))
   print("3.", "***" + get_last_three_letters([]) + "***")
   print("4.", "***" + get_last_three_letters(["A", "E", "O"]) + "***")

我的输出如下:

 1. ann
 2. b

我正在尝试从字符串中获取最后 3 个字符,我希望得到如下输出:

 1. essainityann
 2. ainsieertrey

我不知道如何解决它。

【问题讨论】:

    标签: python string indexing slice


    【解决方案1】:

    这里的问题是您在每次迭代时都会覆盖names。相反,保留一个列表,append 这些值,最后str.join 并返回。

    def get_last_three_letters(a_list):
        tails = []
        for name in a_list:
            if len(name) > 2:
                tails.append(name[-3:].lower())
    
        return ''.join(tails)
    

    如this answer 所述,您可以将其缩短为列表理解。

    def get_last_three_letters(a_list):
        return ''.join([x[-3:].lower() for x in a_list if len(x) > 2])
    

    请注意,将列表传递给str.join 实际上比生成器理解要快!


    >>> get_last_three_letters(["Jess", "Cain", "Amity", "Raeann"])
    'essainityann'
    >>> get_last_three_letters(["CAIn", "JessiE", "O", "ROBERT", "Geoffrey", "Li", "B"])
    'ainsieertrey'
    

    【讨论】:

    • @Kee 现在好了。
    【解决方案2】:

    这应该足够了:

    def get_last_three_chars(my_list):
        return ''.join(x[-3:].lower() for x in my_list if len(x) >= 3)
    

    >>> get_last_three_chars(["Jess", "Cain", "Amity", "Raeann"])
    'essainityann'
    >>> get_last_three_chars(["CAIn", "JessiE", "O", "ROBERT", "Geoffrey", "Li", "B"])
    'ainsieertrey'  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-02
      • 2015-07-04
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多