Python 中两个列表的交叉
Crossover of two Lists in Python
我有2个包含数万条记录的列表如下:
list1=[
"c:\user",
"C:\Windows\app\Prog\folder2\folder3",
"C:\Windows\app\Prog\folder2",
"C:\Intel\Profiles\user3\se",
"C:\Win\add\folder1"
]
list2=[
"C:\Win\add",
"C:\Windows\app\Prog",
"C:\Intel\Profiles"
]
我需要交叉这两个列表并将结果放入字典列表中,如下所示:
dic=[
{"k1": "c:\user","k2": ""},
{"k1": "C:\Windows\app\Prog\folder2\folder3", "k2": "C:\Windows\app\Prog"},
{"k1": "C:\Windows\app\Prog\folder2", "k2": "C:\Windows\app\Prog"},
{"k1": "C:\Intel\Profiles\user3\se", "k2": "C:\Intel\Profiles"}
{"k1": "C:\Win\add\folder1", "k2": "C:\Win\add"}
]
我是这样解决的,但是执行起来很慢,因为列表可能有几十万条记录。
def mergelists(list1,list2):
dic=[]
for i in range(len(list1)):
fitem1=list1[i]
result = [element for element in list2 if element in fitem1]
row = {"k1": fitem1, "k2": result[0]}
dic.append(row)
return (dic)
如何提高执行速度?
一个明显的加快速度的方法是改变
result = [element for element in list2 if element in fitem1]
row = {"k1": fitem1, "k2": result[0]}
到
result = next(element for element in list2 if element in fitem1)
row = {"k1": fitem1, "k2": result}
因为目前代码继续在整个 list2
中搜索与 fitem1
匹配的元素,即使已经找到了一个。
一旦找到一个元素,next
函数将 return 并跳过搜索剩余的 list2
。
我有2个包含数万条记录的列表如下:
list1=[
"c:\user",
"C:\Windows\app\Prog\folder2\folder3",
"C:\Windows\app\Prog\folder2",
"C:\Intel\Profiles\user3\se",
"C:\Win\add\folder1"
]
list2=[
"C:\Win\add",
"C:\Windows\app\Prog",
"C:\Intel\Profiles"
]
我需要交叉这两个列表并将结果放入字典列表中,如下所示:
dic=[
{"k1": "c:\user","k2": ""},
{"k1": "C:\Windows\app\Prog\folder2\folder3", "k2": "C:\Windows\app\Prog"},
{"k1": "C:\Windows\app\Prog\folder2", "k2": "C:\Windows\app\Prog"},
{"k1": "C:\Intel\Profiles\user3\se", "k2": "C:\Intel\Profiles"}
{"k1": "C:\Win\add\folder1", "k2": "C:\Win\add"}
]
我是这样解决的,但是执行起来很慢,因为列表可能有几十万条记录。
def mergelists(list1,list2):
dic=[]
for i in range(len(list1)):
fitem1=list1[i]
result = [element for element in list2 if element in fitem1]
row = {"k1": fitem1, "k2": result[0]}
dic.append(row)
return (dic)
如何提高执行速度?
一个明显的加快速度的方法是改变
result = [element for element in list2 if element in fitem1] row = {"k1": fitem1, "k2": result[0]}
到
result = next(element for element in list2 if element in fitem1)
row = {"k1": fitem1, "k2": result}
因为目前代码继续在整个 list2
中搜索与 fitem1
匹配的元素,即使已经找到了一个。
一旦找到一个元素,next
函数将 return 并跳过搜索剩余的 list2
。