首页 > 解决方案 > 使用 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]

标签: python

解决方案


您可以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')]

推荐阅读