我有 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 循环?
您可以使用单个循环(或理解)来提取所有列名,然后与您要查找的列执行集合交集以获取匹配的列。
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')