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

标签 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(所有三个都不同)。对于索引一,它是 2(因为 'cut' 出现了两次),而在索引二中,它又是 3。同样,我需要对 mylist 的所有列表重复该过程。

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

谢谢。

最佳答案

您可以使用 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]

关于Python:列表比较以查找列表的唯一元素计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21601929/

相关文章:

c# - 了解列表中的继承项和基本项

python - 遍历嵌套列表并为每个没有递归的元素分配一个相互依赖的值(Python)

python - SymPy 不能 lambdify Product

python - Pygame Cass Function 用于创建平台,无需手动创建每个平台

python - 要实现什么类型的设置文件?

python - 溢出错误: cannot fit 'int' into an index-sized integer

python - 时间复杂度 : Cheapst Flights within K stops

algorithm - 查找数组中出现偶数次的三个数字

c++ - 给定两个点,找到直线上的第三个点

python - 使用列表中的值更新字典值