如何生成其中出现另一个字符串的字符串列表
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']
我需要检查一个字符串是否存在于较大的一组字符串中,如果存在则将包含它的字符串添加到另一个列表。我有检查是否存在的代码,它可以正常工作,但由于我的实现,它无法添加字符串。
代码
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']