数据库数据的Python列表理解
我正在尝试减少SQL Server数据库表中的重复项,并且条件很复杂。所有表数据都已拉入Python数据库数据的Python列表理解,python,list,for-loop,list-comprehension,Python,List,For Loop,List Comprehension,我正在尝试减少SQL Server数据库表中的重复项,并且条件很复杂。所有表数据都已拉入Pythonlists 在这一步中,当一个列表值与行中有重复项的列表的列表值匹配时,我想使用列表理解来查找某个字段值 listA是一个唯一的dupIDs:[134L、1610L、1861L、2026L、3211L、4134L、4363L、4453L、4733L,…]列表 listB是二维的: Row# dupID nameID SSN personID [[85097
list
s
在这一步中,当一个列表
值与行中有重复项的列表的列表
值匹配时,我想使用列表理解来查找某个字段值
list
A是一个唯一的dupID
s:[134L、1610L、1861L、2026L、3211L、4134L、4363L、4453L、4733L,…]列表
list
B是二维的:
Row# dupID nameID SSN personID
[[85097L, 236479L, 241583, '999-99-0000', 359913, datetime.datetime(2012, 9, 9, 0, 0)]
[78654L, 236479L, 996783, '999-99-0000', NULL, datetime.datetime(2008, 5, 4, 0, 0)]...]
以下是我想通过列表理解加速的循环:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
首先,您将迭代元素而不是索引,因此您将得到以下结果:
personIDList = []
for a in A:
for b in B:
if a == b[1]:
personIDList.append(b[4])
然后可以很容易地将其转换为列表:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
首先,您将迭代元素而不是索引,因此您将得到以下结果:
personIDList = []
for a in A:
for b in B:
if a == b[1]:
personIDList.append(b[4])
然后可以很容易地将其转换为列表:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
首先将唯一ID列表转换为集合:
s = set(A)
然后使用列表理解对另一个列表进行迭代:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
这将是O(N)
与您的方法相比的复杂性,即O(N**2)
首先将唯一ID列表转换为集合:
s = set(A)
然后使用列表理解对另一个列表进行迭代:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
这将是O(N)
的复杂性,而您的方法是O(N**2)
以下是如何将单个for循环转化为列表理解:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
去
my_list = [i+7 for i in something]
my_list = [i + j for i in first_thing for j in second_thing]
以下是如何将嵌套for循环转换为列表:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
去
my_list = [i+7 for i in something]
my_list = [i + j for i in first_thing for j in second_thing]
因此,在您的情况下,您希望这样做:
以下是如何将单个for循环转换为列表:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
去
my_list = [i+7 for i in something]
my_list = [i + j for i in first_thing for j in second_thing]
以下是如何将嵌套for循环转换为列表:
personIDList = []
for i in range(len(A)):
for j in range(len(B)):
if A[i] == B[j][1]: # if dupID == dupID
personIDList.append(B[j][4]) # append personID
personIDList = [b[4] for a in A for b in B if a == b[1]]
personIDList = [item[4] for item in B if item[1] in s]
my_list = []
for i in something:
my_list.append(i+7)
my_list = []
for i in first_thing:
for j in second_thing:
my_list.append(i + j)
personIDList = [b[4] for a in A for b in B if a == b[1]]
去
my_list = [i+7 for i in something]
my_list = [i + j for i in first_thing for j in second_thing]
因此,在您的情况下,您希望这样做:
我想至少。。。如果您发布示例A和示例B列表,会更容易
我总是喜欢做些傻事
我们可以将其拆分,使其更具可读性
dup_ids_in_b = list(B[:,1]) # take column 1 from B (we use list so its not of type `object`)
boolmask_b_dups_in_a = np.in1d(dup_ids_in_b,A) # True,True,False,... True for all indices where B[i][1] is in A
person_ids = B[boolmask_b_dups_in_a][:,4] # take the fourth column of all the True indices from last step
我想至少。。。如果您发布示例A和示例B列表,会更容易
我总是喜欢做些傻事
我们可以将其拆分,使其更具可读性
dup_ids_in_b = list(B[:,1]) # take column 1 from B (we use list so its not of type `object`)
boolmask_b_dups_in_a = np.in1d(dup_ids_in_b,A) # True,True,False,... True for all indices where B[i][1] is in A
person_ids = B[boolmask_b_dups_in_a][:,4] # take the fourth column of all the True indices from last step
非常感谢大家的帮助!我将发布我所做的。非常感谢大家的帮助!我将发布我所做的。“我想通过列表理解加快速度”?什么使你认为列表理解会更快?“我想通过列表理解来加快速度”?什么使你认为列表理解会更快?