Python:返回列表中顺序出现的常见项目的列表以及不常见项目的列表

标签 python list

lists = [[a,b,c,d],[a,b,c,d,e],[a,b,c,x],[a,b,c,d,e,f]....lots]

common_items = [a,b,c]
uncommon_items = [[d], [d,e], [x], [d,e,f]]

common_elements(lists[0],lists[1])

def common_elements(list1, list2):
    return [element for element in list1 if element in list2]

很多关于 SO 的答案只能同时处理两个列表。需要一个可以处理任意数量列表并返回两个列表的列表。

注意:列表的顺序很重要,它忽略了集合。 注意:必须是每个列表中最低的常见项目,而不是仅基于列表中的第一个列表。

最佳答案

最简单的方法是使用集合,但你会失去顺序。

lists = [['a','b','c','d'],
         ['a','b','c','d','e'],
         ['a','b','c','x'],
         ['a','b','c','d','e','f']]

sets = map(set, lists)
common = set.intersection(*sets)
uncommon = [s-common for s in sets]
print common    # set(['a', 'c', 'b'])
print uncommon  # [set(['d']), set(['e', 'd']), set(['x']), set(['e', 'd', 'f'])]

集合是表示常见元素的最佳方式。您可以通过使用不同的列表理解来维护不常见元素的顺序。

uncommon = [[x for x in l if x not in common] for l in lists]
print uncommon  # [['d'], ['d', 'e'], ['x'], ['d', 'e', 'f']]

假设 common 的元素在所有列表中以相同的顺序出现,那么您可以将 common 集转换为列表。

common = [x for x in lists[0] if x in common]

关于Python:返回列表中顺序出现的常见项目的列表以及不常见项目的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20038900/

相关文章:

python - 在 Django 中如何安排每日报告以电子邮件形式发送

python - Django:如何正确制作购物车? (数组字符串字段)

python - 对列表进行排序,然后按原始顺序给出元素的索引

list - Haskell:用一个元素和一个列表连接元组列表:[(a,[b])] -> [(a,b)]

Python。基于两个键和一个字典对二维列表进行排序

python - 维护按多个属性排序的列表?

python - 使用python中的tkinter模块在treeview列中输出sql

python - 为什么接受 kwargs 但不使用它们?

python - bool 和 list 格式字符串的参数不足

python - 将 Nmap 子进程中的数据直接存储到列表中