用Python检查元组列表中的字符串列表是否可用

2024-06-26 14:35:33 发布

您现在位置:Python中文网/ 问答频道 /正文

目的是检查在元组列表中是否可以使用字符串的查找列表

具体地说,检查look-up列表drop_cols中是否有这些项

drop_cols=['cond', 'main', 'sub', 'task']

可在元组ndata列表中找到

ndata=[('main', '', ''),('task', '', ''),('sub', '', ''),
('cond', '', ''),('misc_mycom', 'ch', '300')]

这可以通过以下方式实现:

all_test=[x == dval for dval in nval for x in drop_cols]

然后,测试结果

if sum(all_test)!=0:
    print ('item available')

然而,我想知道是否有更有效的方法来做到这一点

为了完整起见, 在if-else中,有以下过程:

for nval in ndata:
    # Check whether any item in the list of `drop_cols` available in the tuple of list of `ndata`
    all_test=[x == dval for dval in nval for x in drop_cols]
    if sum(all_test)!=0:
        b=nval  + ('',)
    else:
        b=nval  + (nval[0].split('_')[0] ,)
    all_vals.append(b)

或以list comprehension形式

all_vals= [nval + ('',) if sum ( [x == dval for dval in nval for x in drop_cols] ) != 0
      else nval + (nval [0].split ( '_' ) [0],) for nval in ndata]

Tags: ofintest列表forifallelse
2条回答

这是对公认答案的扩展:

drop_cols维护为类型list

比较set(i) & set(drop_cols)的设置

[i+("",) if set(i)&set(drop_cols) else i+(i[0].split("_")[0],) for i in ndata]

您可以改为使用set差异进行检查:

drop_cols={'cond', 'main', 'sub', 'task'}

print ([i+("",) if set(i)&drop_cols else i+(i[0].split("_")[0],) for i in ndata])

[('main', '', '', ''), ('task', '', '', ''), ('sub', '', '', ''),
 ('cond', '', '', ''), ('misc_mycom', 'ch', '300', 'misc')]

相关问题 更多 >