将列表合并到列表列表中,其中匹配项位于列表中的同一列表中

2024-06-02 12:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,我想将它们组合成一个列表,其中列表中的对象是两个列表之间匹配的列表,但也包括不匹配的对象

由于我是一名python新手,我甚至有点不知道从哪里开始获得这个结果

两份清单:

husband = ['cat','dog','bunny']
wife = ['dog','bunny','horse']

我想要的结果是:

farm = [['cat'],['dog','dog'],['bunny','bunny'],['horse']]

Tags: 对象列表catdogbunnyfarm新手wife
3条回答
full_l = husband + wife
unique_l = list(dict.fromkeys(full_l))
# unique list with order preserved,  if you dont want to preserve order, you can just use set(full_l)
output = [[animal] * full_l.count(animal) for animal in unique_l]

使用集合

In [25]: husband = ["cat","dog","bunny"]
    ...: wife = ["dog","bunny","horse"]

In [26]: husband_set = set(husband)

In [27]: wife_set = set(wife)

In [28]: data = []

In [29]: data.extend([[i] * 2 for i in wife_set.intersection(husband_set)])

In [30]: data.append([i for i in husband_set.difference(wife_set)])

In [31]: data.append([i for i in wife_set.difference(husband_set)])

In [32]: data
Out[32]: [['dog', 'dog'], ['bunny', 'bunny'], ['cat'], ['horse']]

下面是使用collections模块的两种方法

from collections import Counter,defaultdict

husband = ['cat','dog','bunny']
wife = ['dog','bunny','horse']

print([[k] * v for k , v in Counter(husband + wife).items()])

#or

farm = defaultdict(list)
for v in husband + wife:
    farm[v].append(v)

print(farm.values())

相关问题 更多 >