Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用列表拆分列表以获得较小的列表_Python_List - Fatal编程技术网

Python 使用列表拆分列表以获得较小的列表

Python 使用列表拆分列表以获得较小的列表,python,list,Python,List,如何使用预定义列表拆分列表,我想在找到列表中的元素时,将列表x拆分为多个较小的列表(或词典) titles=['a','c','g','final'] x=['a',3,4,2,'c','b','b1',2,'g','final',...] 预期产量 new_list=[['a',3,4,2],['c','b','b1',2],['g'],['final',...]] # OR my_dict={'a':[3,4,2],'c':['b','b1',2],'g':[],'final':[...

如何使用预定义列表拆分列表,我想在找到列表中的元素时,将列表
x
拆分为多个较小的列表(或词典)

titles=['a','c','g','final']

x=['a',3,4,2,'c','b','b1',2,'g','final',...]
预期产量

new_list=[['a',3,4,2],['c','b','b1',2],['g'],['final',...]]
# OR
my_dict={'a':[3,4,2],'c':['b','b1',2],'g':[],'final':[...]}

注意:标题中的元素在x中是唯一的(即在
x
中不会找到超过一次的“a”)

支持在
标题中重复

titles = ['a', 'c', 'g', 'final']

x = ['a', 3, 4, 2, 'c', 'b', 'b1', 2, 'g', 'final', 'r', 'gg']
new_list = []
starting_index = 0
for i in range(0, len(titles) - 1):
    f = x.index(titles[i], starting_index)
    t = x.index(titles[i + 1], starting_index)
    sub_list = x[f:t]
    new_list.append(sub_list)
    starting_index = t

l = x.index(titles[-1])
last_sub_list = x[l:]
new_list.append(last_sub_list)
print(new_list)
  • 您可以计算每个标题的索引:

    indexes = list(map(x.index, titles))
    # or indexes = [x.index(title) for title in titles]
    
  • 然后
    zip
    索引
    索引[1:][/code>这将使每个索引与下一个索引成对:

    z = zip(indexes, indexes[1:] + [None])
    print(list(z))  # [(0, 4), (4, 8), (8, 9), (9, None)]
    
  • 然后使用它进行拆分:

    • 要获取子列表,请执行以下操作:

      resultlist = [x[fr:to] for fr, to in zip(indexes, indexes[1:] + [None])]
      # [['a', 3, 4, 2], ['c', 'b', 'b1', 2], ['g'], ['final', 'value']]
      
    • 要获得口述:

      resultdict = {x[fr]: x[fr + 1:to] for fr, to in zip(indexes, indexes[1:] + [None])}
      # {'a': [3, 4, 2], 'c': ['b', 'b1', 2], 'g': [], 'final': ['value']}
      
  • titles=['a','c','g','final']
    x=['a',3,4,2,'c','b','b1',2,'g','final','r','gg']
    结果=[]
    对于idx,枚举中的val(x):
    如果标题中有val:
    子列表=[val]
    i=idx+1
    而(i
    解决方案之一是:

    titles = ["a", "c", "g", "final"]
    x = ["a", 3, 4, 2, "c", "b", "b1", 2, "g", "final", "x", "y", "z"]
    
    result = [
        x[x.index(i) : j and x.index(j)]
        for i, j in zip(titles, titles[1:] + [None])
    ]
    

    输出:

    [['a', 3, 4, 2], ['c', 'b', 'b1', 2], ['g'], ['final', 'x', 'y', 'z']]
    
    {'a': [3, 4, 2], 'c': ['b', 'b1', 2], 'g': [], 'final': ['x', 'y', 'z']}
    
    要获取词典:

    result = {
        x[x.index(i)]: x[x.index(i) : j and x.index(j)]
        for i, j in zip(titles, titles[1:] + [None])
    }
    

    输出:

    [['a', 3, 4, 2], ['c', 'b', 'b1', 2], ['g'], ['final', 'x', 'y', 'z']]
    
    {'a': [3, 4, 2], 'c': ['b', 'b1', 2], 'g': [], 'final': ['x', 'y', 'z']}
    

    请用您尝试过的代码更新这个问题。这是可行的,但我相信有一种更“pythonic”的方式(来自C背景)
    {'a': [3, 4, 2], 'c': ['b', 'b1', 2], 'g': [], 'final': ['x', 'y', 'z']}