首页 > 解决方案 > 如果元素存在,则在列表列表中查找列表

问题描述

请建议最有效和最紧凑的方法来完成这项基本任务:

如果列表中的输入列表中的元素,我想创建一个带有列表的输出列表,否则只是单元列表中的元素:

input_list = [1,2,3,4,5,6,7,8,9,10,11]
lists = [[1,3,5],[7,9,11]]

# my solution:
output = []
for i in input_list:
    appended = False
    for sublist in lists:
        if i in sublist:
            output.append(list(sublist))
            appended = True
            break
    if not appended:
        output.append([i])

output
[[1, 3, 5],
 [2],
 [1, 3, 5],
 [4],
 [1, 3, 5],
 [6],
 [7, 9, 11],
 [8],
 [7, 9, 11],
 [10],
 [7, 9, 11]]

请不要以偶数为基础,这只是一个例子

标签: python

解决方案


这是简化代码的简单方法:

output = []
for i in input_list:
    for sublist in lists:
        if i in sublist:
            output.append(list(sublist))
            break
    else:
        output.append([i])

只要循环没有被语句终止,循环结束时的else块就会被执行(参见教程)。这样就不需要你的标志了。forbreakappended

我不会选择“最有效”,但对于“紧凑”,您可以使用列表推导,并使用该next函数进行搜索,提供第二个参数作为备用值,以防搜索失败什么都找不到。

output = [
    next((list(sublist) for sublist in lists if i in sublist), [i])
    for i in input_list
]

推荐阅读