查看一个列表中的值是否存在于另一个列表的子字符串中的任何位置

时间:2017-08-09 14:08:44

标签: python list

所以我从HTML电子邮件中解析了一个列表,名为br_list

br_list: [<b>Sent:</b>, <b>To:</b>, <b>Subject:</b>, 'NEFS VII & VIII Manager', 'E-mail: ', 'Office:(508)984-0900 ', 'Cell:(508)965-0064']

我有一个部门列表,sectors

sectors = (
    'Fixed Gear Sector',
    'Maine Coast Community Sector',
    'Maine Permit Bank',
    'NCCS',
    'NEFS 2',
    'NEFS 3',
    'NEFS 4',
    'NEFS 5',
    'NEFS 6',
    'NEFS 7',
    'NEFS VII',
    'NEFS 8',
    'NEFS VIII',
    'NEFS 9',
    'NEFS 10',
    'NEFS X',
    'NEFS 11',
    'NEFS 12',
    'NEFS 13',
    'New Hampshire Permit Bank',
    'Port Clyde Community Groundfish Sector',
    'Sustainable Harvest Sector 1',
    'Sustainable Harvest Sector 2',
    'Sustainable Harvest Sector 3',
    'Tri-State Sector',
    )

我想看看br_list是否包含sectors中的任何条目。它应该像

一样简单
if any(i in br_list for i in sectors):
print("yup")

....但没有打印出来。我认为它失败了,因为它正在寻找一个不存在的扇区的单个列表条目,即使其中一个列表条目中明显存在扇区。

所以:

1)有没有办法检查br_list中的任何一个扇区是否存在?

2)如果sector中确实存在br_list,是否有办法捕获该扇区字符串?在这种情况下,"NEFS VII"

** 编辑: **正如所指出的那样,我的代码失败了,因为NEFS VII是列表条目的子字符串,而不是列表条目本身。我用下面接受的答案解决了这个问题。

2 个答案:

答案 0 :(得分:3)

这可能就是你想要的,虽然你的问题的措辞让许多人(包括我在内)关闭了..你想检查我假设的子串..

br_list = ['NEFS VII & VIII Manager', 'E-mail: ', 'Office:(508)984-0900 ', 'Cell:(508)965-0064']
sectors = (
    'Fixed Gear Sector',
    'Maine Coast Community Sector',
    'Maine Permit Bank',
    'NCCS',
    'NEFS 2',
    'NEFS 3',
    'NEFS 4',
    'NEFS 5',
    'NEFS 6',
    'NEFS 7',
    'NEFS VII',
    'NEFS 8',
    'NEFS VIII',
    'NEFS 9',
    'NEFS 10',
    'NEFS X',
    'NEFS 11',
    'NEFS 12',
    'NEFS 13',
    'New Hampshire Permit Bank',
    'Port Clyde Community Groundfish Sector',
    'Sustainable Harvest Sector 1',
    'Sustainable Harvest Sector 2',
    'Sustainable Harvest Sector 3',
    'Tri-State Sector',
    )

finds = []
for check in sectors:
    if any(check in item for item in br_list):
        finds.append(check)
print(finds)  # ['NEFS VII']

finds = []
for string in br_list:
    finds.extend([x for x in sectors if x in string])
print(finds)

根据两者中哪list更大,两种方法的效率可能会有所不同。

答案 1 :(得分:0)

首先,您的sectors不是list,而是tuple。您的br_list包含无效元素(例如<b>Sent:</b>应该放在引号中)

至于你的第二个问题,你可以做一个嵌套的列表理解:

found_sectors = [sector for entry in br_list for sector in sectors if sector in entry]

其结果如下:

found_sectors = []
for entry in br_list:
    for sector in sectors:
        if sector in entry:
            found_sectors.append(sector)