如何生成其中出现另一个字符串的字符串列表

How to generate a list of strings in which another string appears

我需要检查一个字符串是否存在于较大的一组字符串中,如果存在则将包含它的字符串添加到另一个列表。我有检查是否存在的代码,它可以正常工作,但由于我的实现,它无法添加字符串。

代码

test_list = ['temp', 'temperature']

b = ['sunny', 'cloudy', 'stempy', 'temp','newtemperature']

hits = []
hit_name = []
for test_string in b:
    res = any(item in test_string for item in test_list)
    if res == True:
        hit_name.append(item)
    hits.append(res)


# print result 
print('\n'*2, hits)

期望输出

hit_name = ['stempy', 'temp','newtemperature']

你可以做到

 hits = [x for x in b if any(s in x for s in test_list)]

这是我应该做的代码,如果列表非常大,则使用多进程。

import joblib
from joblib import Parallel,delayed
test_list = ['temp', 'temperature']

b = ['sunny', 'cloudy', 'stempy', 'temp','newtemperature']

hit_name = []

# Using un function to paralleliza it if database is big
def func(x,y):
    if all(c in b[y] for c in test_list[x]):
        return(b[y])

# using the max of processors
number_of_cpu = joblib.cpu_count()
# Prpeparing a delayed function to be parallelized
delayed_funcs = (delayed(func)(x,y) for x in range(len(test_list)) for y in range(len(b)))
# fiting it with processes and not threads
parallel_pool = Parallel(n_jobs=number_of_cpu,prefer="processes")
# Fillig the hit_name List
hit_name.append(parallel_pool(delayed_funcs))
# Droping the None
hit_name = list(set(filter(None, hit_name[0])))
hit_name

有关简短的解决方案,请参阅@jussi-nurminen 的使用列表理解的方法。

如果您想坚持原来的方法,非常!您只需要附加 test_string(这是 b 中正在检查的当前元素)而不是 item.

test_list = ['temp', 'temperature']

b = ['sunny', 'cloudy', 'stempy', 'temp','newtemperature']

hits = []

for test_string in b:
    if any(item in test_string for item in test_list):
        hits.append(test_string)

print(hits)

这给出了预期的输出:

['stempy', 'temp', 'newtemperature']