Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据库数据的Python列表理解_Python_List_For Loop_List Comprehension - Fatal编程技术网

数据库数据的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

我正在尝试减少SQL Server数据库表中的重复项,并且条件很复杂。所有表数据都已拉入Python
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

非常感谢大家的帮助!我将发布我所做的。非常感谢大家的帮助!我将发布我所做的。“我想通过列表理解加快速度”?什么使你认为列表理解会更快?“我想通过列表理解来加快速度”?什么使你认为列表理解会更快?