在没有嵌套 for 循环的情况下,在“查找”列表中找到一个相似但不相等的值?

问题描述 投票:0回答:1

我有 2 个列表。一个列表包含一组列,另一个列表是这些列的“查找”。

我运行代码来检查列表中是否存在某些列,如果不存在,我将返回缺少的列: 缺少专栏

cols_diff = ['VendorPartNumber']

我的查找列表如下所示:

table_cols_lookup = ['[Asset] NVARCHAR(MAX)', ' [SKU] NVARCHAR(MAX)', ' [BreakFix] NVARCHAR(MAX)', ' [Carrier] NVARCHAR(MAX)', ' [Created] NVARCHAR(MAX)', ' [CreatedBy] NVARCHAR(MAX)', ' [Code] NVARCHAR(MAX)', ' [Full] NVARCHAR(MAX)', ' [IsItem] NVARCHAR(MAX)', ' [LNumber] NVARCHAR(MAX)', ' [OrderedQuantity] NVARCHAR(MAX)', ' [OrderIntent] NVARCHAR(MAX)', ' [OrderNumber] NVARCHAR(MAX)', ' [OrderType] NVARCHAR(MAX)', ' [ReceivedLocation] NVARCHAR(MAX)', ' [ReceivedQuantity] NVARCHAR(MAX)', ' [RemainingQuantity] NVARCHAR(MAX)', ' [SerialNumber] NVARCHAR(MAX)', ' [SKUId] NVARCHAR(MAX)', ' [SkuName] NVARCHAR(MAX)', ' [Supplier] NVARCHAR(MAX)', ' [VendorPartNumber] NVARCHAR(MAX)']

现在,我有一个有效的代码,但它使用嵌套的 for 循环,我不确定当 cols 的数量从几个 10s、20s cols 增长到 500+ 列时它的效率如何。

for col in table_cols_lookup:
    for dcol in cols_diff: 
        if dcol in col:
            print(col)

它返回以下内容,这是我用来将缺失列添加到 SQL DB 的列

[VendorPartNumber] NVARCHAR(MAX)

关于如何提高查找效率的任何想法?尽可能避免嵌套 for 循环?

python list for-loop nested lookup
1个回答
0
投票

您可以使用单个循环(或理解)来提取所有列名,然后与您要查找的列执行集合交集以获取匹配的列。

import re
cols = {re.search(r'\[(\w+)]', s).group(1) for s in table_cols_lookup}
cols_diff = ['VendorPartNumber']
res = cols.intersection(cols_diff) # {'VendorPartNumber'}

# or check in a loop:
for c in cols_diff:
    print(c if c in cols else 'Not found')  
© www.soinside.com 2019 - 2024. All rights reserved.