检查列表python列表中最后一项的相似性

时间:2016-10-30 01:57:54

标签: python list

我有一长列表,我想检查大列表中每个列表的最后一项是否相等,如果是,那么我想创建一个新列表,按顺序添加它们并添加项目在项目“^”之前进入一个新的列表列表,例如,我有以下格式(这只是一个例子,每次都可以更改数据,所以代码应该是通用的):

[[ " 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]==

2 个答案:

答案 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);

我希望这会有所帮助。