首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历列表,维护列表结构

遍历列表,维护列表结构
EN

Stack Overflow用户
提问于 2021-11-02 14:42:01
回答 3查看 395关注 0票数 1

假设我有以下名单:

代码语言:javascript
复制
names = [['Matt', 'Matt', 'Paul'], ['Matt']]

我只想返回列表中的"Matts“,但我也希望维护列表结构的列表。所以我想回来:

代码语言:javascript
复制
[['Matt', 'Matt'], ['Matt']]

我有这样的东西,但这会把所有的东西放在一个大清单上:

代码语言:javascript
复制
matts = [name for namelist in names for name in namelist if name=="Matt"]

我知道这样的事情是可能的,但我想避免重复列表和附加。这个是可能的吗?

代码语言:javascript
复制
names = [['Matt', 'Matt', 'Paul'], ['Matt']]
matts = []
for namelist in names:
    matts_namelist = []
    for name in namelist:
        if name=="Matt":
            matts_namelist.append(name)
        else:
            pass
    matts.append(matts_namelist)
EN

回答 3

Stack Overflow用户

发布于 2021-11-02 14:50:56

使用list.count的另一种方法

代码语言:javascript
复制
>>> names = [['Matt', 'Matt', 'Paul'], [], ['Matt']]
>>> [name.count('Matt') * ['Matt'] for name in names]
[['Matt', 'Matt'], [], ['Matt']]

您也可以尝试使用itertools.repeat

代码语言:javascript
复制
>>> import itertools
>>> [[*itertools.repeat('Matt', name.count('Matt'))] for name in names]
[['Matt', 'Matt'], [], ['Matt']]

最后,正如@DaniMensejo所建议的,您还可以在嵌套的range理解中使用list迭代器:

代码语言:javascript
复制
>>> [['Matt' for _ in range(name.count('Matt'))] for name in names]
[['Matt', 'Matt'], [], ['Matt']]
票数 2
EN

Stack Overflow用户

发布于 2021-11-02 14:44:14

IIUC,您可以使用下面这样的嵌套列表来完成此操作:

代码语言:javascript
复制
>>> names = [['Matt', 'Matt', 'Paul'], ['Matt']]
>>> [[name for name in lst_name if name=='Matt'] for lst_name in names]
[['Matt', 'Matt'], ['Matt']]
票数 1
EN

Stack Overflow用户

发布于 2021-11-02 14:47:22

使用filter函数-

代码语言:javascript
复制
matts = [list(filter(lambda x: x=='Matt', namelist)) for namelist in names]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69812272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档