使用Enumerate Python,使用1列表理解而不是3来组合两个不同的索引搜索

2024-09-30 08:29:12 发布

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

您好,我想知道是否可以在一个列表条件中运行两个不同的枚举条件:

mlist = ['a', 'boy 808', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'a', 'boy 808', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

loc = [(a,b), a for a, b for b, zip(x in enumerate(mlist), y in enumerate (mlist)) if '808' in x, if 'd' in y]
print(loc)

这可能吗?我尝试了上述操作,但出现无效语法错误:

 File "c:\Users\sys_nsgprobeingestio\Documents\dozie\odfs\ctests.py", line 118
    loc = [(a,b), a for a, b for b, zip(x in enumerate(mlist), y in enumerate (mlist)) if '808' in x, if 'd' in y]
                      ^
SyntaxError: invalid syntax

我想得到想要的输出:[(1,3)、(12,14)]澄清一下,这只是一个示例数组。此逻辑将用于出现多个关键字的大文件中。这里的单词开始和结束文件的某个部分。我希望获得每个部分的头和尾的订购对

每次出现的有序元组列表

我能够使用3种不同的列表理解来获得我需要的内容。我想知道您是否可以一次完成这项工作:

mlist = ['a', 'boy 808', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'a', 'boy 808', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

blist = [i for i,x in enumerate(mlist) if 'boy' in x ]
dlist = [i for i,x in enumerate(mlist) if 'd' in x ]

tuplist = [(a,b) for a, b in zip((x for x in blist), (y for y in dlist)) ]
print(tuplist)

Tags: 文件in列表forifzip条件loc
1条回答
网友
1楼 · 发布于 2024-09-30 08:29:12

您可以简单地zip您的blistdlist列表:

mlist = ['a', 'boy 808', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'a', 'boy 808', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

tuplist = list(zip([i for i,x in enumerate(mlist) if 'boy' in x],
                   [i for i,x in enumerate(mlist) if 'd' in x]
                  )
              )
print(tuplist)

输出:

[(1, 3), (12, 14)]

如果boy值始终与d值交错,则可以通过同时检查两个值,将理解度降低为1:

dlist = [i for i, x in enumerate(mlist) if 'boy' in x or 'd' in x]
tuplist = list(zip(dlist[::2], dlist[1::2]))
print(tuplist)

相关问题 更多 >

    热门问题