首页 > 解决方案 > 仅在集合中查找超弦

问题描述

在试图帮助回答这个问题时,我认为 numpy 将是 python 循环的一个很好的替代品,虽然我似乎无法弄清楚如何去做,现在它已经成为一个我想弄清楚但做不到的头脑谜题。我不想被认为提出了同样的问题,但我确实认为 numpy 在这里可能会更好。

手头的问题:

给定大量字符串

data = ['test', 'foo','testing','foobar', 'bar', 'pie', 'applepie', ...]

返回一个列表,其中仅包含包含给定列表中字符串的子字符串的字符串:

['testing', 'foobar', 'applepie']

我尝试了以下方法:经过其他几次失败的尝试,但这对我来说似乎最有意义

import numpy as np

data = ['test', 'foo','testing','foobar', 'bar', 'pie', 'applepie']

d = np.unique(np.array(data))
print(d[((d in d) & (not d == d))])

显然这会返回一个空数组,但我似乎无法找出正确的过滤器。我见过其他类似的问题/答案,但令我沮丧的是,没有答案使用 numpy。

标签: pythonnumpy

解决方案


我不认为 numpy 是做到这一点的好方法,为什么不是这样的列表理解:

print([i for i in data if any([x in i and x!=i for x in data])])

输出:

['testing', 'foobar', 'applepie']

我认为这已经很好了,你回答得对,但你也可以写一个循环:

l = []
for i in data:
    if any([x in i and x!=i for x in data]):
        l.append(i)
print(l)

推荐阅读