Python:列表比较以查找列表的唯一元素数

时间:2014-02-06 11:40:44

标签: python algorithm list

我正在尝试在Python中为我的一个项目实现字符串比较算法。因为我是python的新手,所以我在旅途中学习。但是我坚持算法的一步。 目前我有列表清单。它按长度排序和分组。

mylist = list(list(i[1]) for i in itertools.groupby(sorted(mylist, key=len), len))
>>> [
      [['pat'],['cut'],['rat']],
      [['sat','pat'],['cut','pat']], 
      [['rat','cut','pat'],['put','cut','bat'],['mat','gut','lit']]
      [[...]]...
    ]

如果我们考虑列中的mylist [2]元素,它看起来像这样

mylist[2] 
>>> [['rat','cut','pat'],
     ['put','cut','bat'],
     ['mat','gut','lit']]

我想比较每一列并返回最常出现的元素数。即在零指数处,它是3(所有三个都不同)。对于索引1,它是2(因为' cut'出现两次),而在索引2中,它再次是3。同样,我需要重复所有mylist列表的过程。

感觉我被困在这里。有人可以建议我一个合适的方法,也许是列表理解?

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用set来提取唯一元素,并使用zip(*list_of_list)作为“转置”列表列表的技巧。试试这个:

lst = [
  [['pat'],['cut'],['rat']],
  [['sat','pat'],['cut','pat']], 
  [['rat','cut','pat'],['put','cut','bat'],['mat','gut','lit']]
]

print map(lambda ll: [len(set(l)) for l in zip(*ll)], lst)

输出:

[[3], [2, 1], [3, 2, 3]]

编辑:要获得每个列表的最小值,可以执行以下操作:

print map(lambda ll: min([len(set(l)) for l in zip(*ll)]), lst)

输出:

[3, 1, 2]