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']}