Python中的交叉列表理解

rdo*_*dev 2 python list-comprehension

假设我有两个字符串列表:

a = ['####/boo', '####/baa', '####/bee', '####/bii', '####/buu']

其中####代表4位随机数.和

b = ['boo', 'aaa', 'bii']

我需要知道列表a中的哪个字符串条目包含任何给定的条目b.我能够通过几个嵌套循环完成此in操作,然后使用运算符检查字符串是否包含b中的当前条目.但是,对于py来说相对较新,我几乎是积极的,这不是写出它的最pythonic或优雅的方式.那么,是否有这样的习惯用来减少我的解决方案?

Thi*_*ter 5

下面的代码为您提供了一个数组,a其中包含斜杠后面的元素所在的索引b.

a_sep = [x.split('/')[1] for x in a]
idxs = [i for i, x in enumerate(a_sep) if x in b]
Run Code Online (Sandbox Code Playgroud)

要提高性能,请创建b一个集而不是列表.

演示:

>>> a = ['####/boo', '####/baa', '####/bee', '####/bii', '####/buu']
>>> b = ['boo', 'aaa', 'bii']
>>> a_sep = [x.split('/')[1] for x in a]
>>> idxs = [i for i, x in enumerate(a_sep) if x in b]
>>> idxs
[0, 3]
>>> [a[i] for i in idxs]
['####/boo', '####/bii']
Run Code Online (Sandbox Code Playgroud)

如果您希望直接获取元素而不是索引:

>>> a = ['####/boo', '####/baa', '####/bee', '####/bii', '####/buu']
>>> b = ['boo', 'aaa', 'bii']
>>> [x for x in a if x.split('/')[1] in b]
['####/boo', '####/bii']
Run Code Online (Sandbox Code Playgroud)