我有一长列表,我想检查大列表中每个列表的最后一项是否相等,如果是,那么我想创建一个新列表,按顺序添加它们并添加项目在项目“^”之前进入一个新的列表列表,例如,我有以下格式(这只是一个例子,每次都可以更改数据,所以代码应该是通用的):
[[ " a", "b" , "^", "xxx"]
[ " c", "d", "e" , "^", "xxx"]
[ " a", "h" , "^", "nnn"]
[ " c", "d", "s" , "^", "nnn"]]
我想回来:
list1 = [ "xxx", "nnn"]
在创建的列表列表的索引中对应:
list1= [ [b , e] , [ h, s] ]
在“^”项之前取名,并在list1中添加与索引相对应的所有内容,我不知道如何进行逻辑但我的试用:
def patterns(file_of_context):
### the original list of list
list_of_context= context_file(file_of_context)
for a in list_of_context:
for b in a:
if a[-1]==
答案 0 :(得分:0)
您可以使用OrderedDict
其中key是嵌套列表中的最后一个元素,值为list
,其中包含'^'
之前的项:
from collections import OrderedDict
l = [
[" a", "b", "^", "xxx"],
[" c", "d", "e", "^", "xxx"],
[" a", "h", "^", "nnn"],
[" c", "d", "s", "^", "nnn"]
]
res = OrderedDict()
for x in l:
try:
index = x.index('^')
if index > 0:
res.setdefault(x[-1], []).append(x[index - 1])
except ValueError:
pass
print(res.keys())
print(res.values())
输出:
['xxx', 'nnn']
[['b', 'e'], ['h', 's']]
答案 1 :(得分:0)
itertools
来自functools
和来自from functools import reduce
from itertools import groupby
list_of_lists = [[' a', 'b', '^', 'xxx'],
[' c', 'd', 'e', '^', 'xxx'],
[' a', 'h', '^', 'nnn'],
[' c', 'd', 's', '^', 'nnn']]
final_list = []
for i in groupby(list_of_lists, key=lambda x: x[-1]):
final_list.append(list(reduce(lambda x,y: (x[x.index("^")-1],y[y.index("^")-1]), i[1])))
print(list(set(map(lambda x: x[-1], list_of_lists))))
print(final_list)
的{{3}}来实现所需的输出:
Scanner lineScan = new Scanner(line);
我希望这会有所帮助。