我需要处理SET数据类型并找到所有匹配的模式。 我有一个有效的代码:
d=SET type input
fin_list=[]
for i in d:
mat = re.findall(r"\w+\.\w+",str(i))
if mat:
fin_list.append(' '.join(mat))
print ','.join(fin_list)
例如:
Input:
set(['databasename.tablename', 'hello', 'fact.table'])
Output:
databasename.tablename,fact.table
请提出一种高效且Python化的方法。
答案 0 :(得分:0)
这是使用str.join
的另一种方法。
演示:
import re
d = set(['databasename.tablename', 'hello', 'fact.table'])
print( ", ".join(re.findall(r"\w+\.\w+", "|".join(d))) )
输出:
databasename.tablename, fact.table
答案 1 :(得分:0)
我只编译一次正则表达式模式,并使用list_comprehension:
import re
s = set(['databasename.tablename', 'hello', 'fact.table'])
rx = re.compile(r"\w+\.\w+")
fin_list = [" ".join(rx.findall(i)) for i in s if rx.search(i)]
print fin_list
给出预期的结果:
['databasename.tablename', 'fact.table']
答案 2 :(得分:0)
我不确定为什么要在append中使用join。
一个简单的班轮将为您完成这项工作。
d=SET type input
output = [element for element in d if "." in element] # this line if you want all the elements of set having '.' inside.
Time taken : 0:00:00.005000
output = [element for element in d if "." in element and element.count(".") == 1] # this if you want 1 '.' inside
Time taken: 0:00:00.007000
output = [element for element in d if "." in element and element.count(".") == 1 and not element.startswith(".")] # this if you dont want elements starting with '.'
print(",".join(output))
Time taken: 0:00:00.007000
Your code: 0:00:00.012000