【问题标题】:Slicing a list specially专门切片列表
【发布时间】:2016-03-16 12:46:13
【问题描述】:

如何获取列表的最后三个元素,不包括第一个元素?

以这两个列表为例

a = ['Matt', '1', '2'] , b = ['Luke', '1', '2', '3']

我希望返回的列表是:['1', '2']['1', '2', '3']。有没有简单的方法可以做到这一点?

【问题讨论】:

  • ['1', '2'] 最后 3 个元素 怎么样?
  • 最后三个元素不包括第一个元素。所有列表的格式都为['name', 'score', 'score'..],我需要最后三个'score'元素,不包括'name'。

标签: list python-3.x slice


【解决方案1】:

为了从列表中获取 last n 元素,您可以:

a[-n:]

这是一个简单的例子:

>>> a = [1, 2, 3, 4]
>>> a[-3:]
[2, 3, 4]

如果您的列表包含

【讨论】:

    【解决方案2】:

    在您的情况下,名称始终是列表中的第一个参数,因此只需应用于其中的每一个:

     a = a[1:]
     b = b[1:]
    

    获取最后三个参数对 a 不起作用,因为它包含 3 个参数。它会在一些条件语句之后起作用。

    如果您确定要使用最后 3 个参数,请使用:

    a = a[-3:]
    b = b[-3:]
    

    为您提供完整的 sn-p:

    def get_list(my_list):
        if len(my_list) > 3:
            return my_list[-3:]
        else:
            return my_list[1:]
    

    【讨论】:

      【解决方案3】:

      您可以简单地使用slicing

      >>> b[-3:]
      ['1', '2', '3']
      

      如果您的列表中的分数少于 3 个,那么您可以:

      >>> b = ['Luke', '1', '2']
      >>> b[1:]
      ['1', '2']
      

      所以要将它们组合起来,您可以使用:

      if len(b) > 3:
          b[-3:]
      else:
          b[1:]
      

      【讨论】:

      • 但这会返回第一个之后的所有元素。如果我有一个这种格式的列表:`['n', '1', '2', '3', '4', '5'],我需要它返回 ['3', '4', '5'],而不是 ['1', '2', '3', '4', '5']。
      • 我修复了这个@Matt
      【解决方案4】:

      除了其他好的答案,您可能需要考虑使用dictionaries 而不是列表。你可以这样做:

      a = ['Matt', '1', '2']
      b = ['Luke', '1', '2', '3']
      scoresDict = {}
      
      scoresDict[a[0]] = a[1:]
      scoresDict[b[0]] = b[1:]
      
      print(scoresDict)
      print(scoresDict['Matt'])
      print(scoresDict['Luke'])
      

      输出:

      {'Matt': ['1', '2'], 'Luke': ['1', '2', '3']}
      ['1', '2']
      ['1', '2', '3']
      

      【讨论】:

        【解决方案5】:

        对于list 中的不同元素,将所有这些元素放在一个列表中,然后将map 放在lambda 函数中。

        In [1]: a = [1,2,3,4]
        In [2]: b = ['a', 'b', 'c', 'd', 'e']
        In [3]: lis = [a, b]
        
        In [4]: list(map(lambda x: x[-(len(x)-1):], lis))
        Out[4]: [[2, 3, 4], ['b', 'c', 'd', 'e']]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-14
          • 1970-01-01
          • 1970-01-01
          • 2017-06-24
          • 2015-02-19
          • 2014-05-13
          • 1970-01-01
          相关资源
          最近更新 更多