嗨,我想知道是否可以在一个列表条件中运行两个不同的枚举条件:
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)
Run Code Online (Sandbox Code Playgroud)
这可能吗?我尝试了上面的方法,但出现了无效的语法错误:
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
Run Code Online (Sandbox Code Playgroud)
我想获得所需的输出:[(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)
Run Code Online (Sandbox Code Playgroud)
您可以简单地列出zip您的blist和dlist:
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)
Run Code Online (Sandbox Code Playgroud)
输出:
[(1, 3), (12, 14)]
Run Code Online (Sandbox Code Playgroud)
如果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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |