python - 如果元素存在,则在列表列表中查找列表
问题描述
请建议最有效和最紧凑的方法来完成这项基本任务:
如果列表中的输入列表中的元素,我想创建一个带有列表的输出列表,否则只是单元列表中的元素:
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]]
请不要以偶数为基础,这只是一个例子
解决方案
这是简化代码的简单方法:
output = []
for i in input_list:
for sublist in lists:
if i in sublist:
output.append(list(sublist))
break
else:
output.append([i])
只要循环没有被语句终止,循环结束时的else
块就会被执行(参见教程)。这样就不需要你的标志了。for
break
appended
我不会选择“最有效”,但对于“紧凑”,您可以使用列表推导,并使用该next
函数进行搜索,提供第二个参数作为备用值,以防搜索失败什么都找不到。
output = [
next((list(sublist) for sublist in lists if i in sublist), [i])
for i in input_list
]
推荐阅读
- python - pandas:访问与其他df中的i索引值对应的i列值
- c - x86 汇编 (AT&T):通过指向指针的指针动态分配二维数组的内存
- google-apps-script - Google 表格脚本:TypeError:getValues 不是函数
- html - React中字符串的粗体部分
- consul - 如何将 wan consul 节点添加到运行 consul 的远程服务器
- php - 从具有替代值的数据库表中检索所有组合
- c++ - 为什么 std:string 在比较相同文本的子字符串时不返回 0?
- symfony - 试图调用类的名为“remove”的未定义方法
- r - 在 R 中将推文标记为 ngram
- sql - DBeaver 中的 WHILE 循环给出语法错误