【问题标题】:create a sublist from a python list从 python 列表创建一个子列表
【发布时间】:2020-12-29 12:17:10
【问题描述】:

我有一个python列表如下:

list_ = [-100, 1, 3, 5, 7, 100]

我想创建另一个列表,如下所示; (注意最后一个100不包括在内!!)

new_list = [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]

我尝试如下:

new_list = []

for i in list_:
    new_list.append(list([i]))

它生成[[-100], [1], [3], [5], [7], [100]],这不是我想要的。

【问题讨论】:

  • new_list = [lst[:i] for i in range(1, len(lst))]

标签: python python-3.x list python-2.7


【解决方案1】:

这是你想要的吗?

l = [-100, 1, 3, 5, 7, 100]
print([l[:i+1] for i in range(0, len(l) - 1)])

输出:

[[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]

甚至更简单:

print([l[:i] for i in range(1, len(l))])

【讨论】:

    【解决方案2】:

    您可能想要在这里做的是像这样使用列表切片:

    new_list = []
    
    for i in range(1,len(list_)):
        new_list.append(list_[:i])
        
    

    打印此循环生成的列表会产生:

    [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]
    

    有关列表切片如何工作的更多详细信息,请参阅此处 Python 的非正式介绍中的切片部分: https://docs.python.org/3/tutorial/introduction.html

    【讨论】:

      【解决方案3】:

      这可能是你的意思:

      list_ = [-100, 1, 3, 5, 7, 100]
      
      new_list = []
      
      for i in range(1, len(list_)):
          new_list.append(list_[:i])
      
      print(new_list)
      # outputs [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]
      

      在每次迭代中,我们将列表slice 直至索引i,从索引0 开始直到len(list_) - 1,使用range 生成索引。

      【讨论】:

        【解决方案4】:

        recursive function 呢?

        list_ = [-100, 1, 3, 5, 7, 100]
        matrix_ = []
        
        
        def matrix(lst):
            if not lst:
                return
            length = len(lst)-1
            if length:
                matrix_.append(lst[:length])
                matrix(lst[:length])
        
        x = matrix(list_)
        print(matrix_)
        

        输出

        [[-100, 1, 3, 5, 7], [-100, 1, 3, 5], [-100, 1, 3], [-100, 1], [-100]]
        

        如果你愿意,然后将其反转:

        matrix_.reverse()
        print(matrix_)
        # [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]
        

        附加

        1.使用 While 循环

        list_ = [-100, 1, 3, 5, 7, 100]
        
        
        def matrix(lst):
        
            matrix_ = []
            count = 0
            prev = []
            while count < len(lst)-1:
                prev.append(lst[count])
                matrix_.append(prev.copy())
                count += 1
            return matrix_
        
        
        x = matrix(list_)
        print(x)
        # [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]
        

        2。使用Generator Function

        list_ = [-100, 1, 3, 5, 7, 100]
        
        
        def matrix(lst):
            matrix_ = []
            count = 0
            prev = []
            while count < len(lst)-1:
                prev.append(lst[count])
                matrix_.append(prev.copy())
                count += 1
            yield matrix_
        
        
        x = list(matrix(list_))
        print(x[0])
        # [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]
        

        3. Enumerate

        list_ = [-100, 1, 3, 5, 7, 100]
        
        
        def matrix(lst):
            result = []
            for idx, _ in enumerate(lst):
                if idx:
                    list_block = lst[:idx]
                    result.append(list_block)
            return result
        
        x = matrix(list_)
        print(x)
        # [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]
        

        4. range function

        list_ = [-100, 1, 3, 5, 7, 100]
        
        
        def matrix(lst):
            result = []
            for i in range(len(lst)):
                if i:
                    list_block = lst[:i]
                    result.append(list_block)
            return result
        
        x = matrix(list_)
        print(x)
        # [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]
        

        5.使用 itertools takewhile 只是为了好玩

        from itertools import takewhile
        
        list_ = [-100, 1, 3, 5, 7, 100]
        
        
        def make_list(item):
        
            matrix = []
            for i in range(1, len(item)):
                wanted_items = list(takewhile(lambda x: x != item[-i], item))
                matrix.append(wanted_items)
            matrix.reverse()
            return matrix
        
        result = make_list(list_)
        print(result)
        # [[-100], [-100, 1], [-100, 1, 3], [-100, 1, 3, 5], [-100, 1, 3, 5, 7]]
        

        【讨论】:

          【解决方案5】:

          试试这个

          lst=[-100,1,3,5,7,100]
          new_list = []
          
          for i in range(len(lst):
              new_list.append(lst[:i])
          

          【讨论】:

          • 除了缺少括号外,这个解决方案是不正确的。
          • 我没有执行代码,想将方法发布到lst[:i] 作为解决方案。但这是我的责任,应该执行它。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多