我只需要从嵌套列表中提取基于第一个元素的唯一子列表.例如

in = [['a','b'], ['a','d'], ['e','f'], ['g','h'], ['e','i']]
out = [['a','b'], ['e','f'], ['g','h']]

我的方法是将两个列表分解为两个列表,并分别判断元素.

lis = [['a','b'], ['a','d'], ['e','f'], ['g','h']]
lisa = []
lisb = []
for i in lis:
    if i[0] not in lisa:
        lisa.append(i[0])
        lisb.append(i[1])
out = []
for i in range(len(lisa)):
    temp = [lisa[i],lisb[i]]
    out.append(temp)

当处理包含10,000,000多个子列表的列表时,这是一种开销很大的操作.有没有更好的方法?

推荐答案

使用带有辅助set对象的高效内存生成器函数来筛选第一个唯一子元素上的项目(取第一个唯一的):

def gen_take_first(s):
    seen = set()
    for sub_l in s:
        if sub_l[0] not in seen:
            seen.add(sub_l[0])
            yield sub_l

inp = [['a','b'], ['a','d'], ['e','f'], ['g','h'], ['e','i']]
out = list(gen_take_first(inp))
print(out)

[['a', 'b'], ['e', 'f'], ['g', 'h']]

Python-3.x相关问答推荐

添加任意数量的 pandas 数据框

为什么空列表也能起作用?

如何将日期时间索引写入日期类型的表?

两个 y 轴在零处对齐的 plotly barplot

如何使用 django rest 框架在 self forienkey 中删除多达 n 种类型的数据?

导入在不同目录中定义的函数

通过附加/包含多个列表来创建 nDimensional 列表

获取以特定字母开头的姓氏

使用 Python 解析 JSON 嵌套字典

具有函数值的 Python 3 枚举

ValueError:找不到子字符串,我做错了什么?

创建一个可旋转的 3D 地球

全局捕获快速 api 中的异常

aiohttp+sqlalchemy:在回滚无效事务之前无法重新连接

如何将 Matplotlib 图形转换为 PIL Image 对象(不保存图像)

将 args、kwargs 传递给 run_in_executor

python setup.py egg_info mysqlclient

无论如何我可以在 Google colaboratory 中下载文件吗?

为什么 string.maketrans 在 Python 3.1 中不起作用?

Python 3.4 多处理队列比 Pipe 快,出乎意料