【问题标题】:If Substring not Contain in String python如果字符串python中不包含子字符串
【发布时间】:2021-05-30 04:06:55
【问题描述】:

我有两个字符串列表,一个列表包含字符串,另一个列表包含其子字符串。我想检查是否子字符串不可用,然后打印子字符串。我可以打印可用的刺。

data = ['ab.txt','bbbbbbbbb','ip.txt']
data2 = ['D:\\ARSDP10\\Exm\\New folder\\ab.txt', 'D:\\ARSDP10\\Exm\\New 
folder\\bc.txt', 
'D:\\ARSDP10\\Exm\\New folder\\cd.txt', 'D:\\ARSDP10\\Exm\\New folder 
(2)\\ef.txt', 
'D:\\ARSDP10\\Exm\\New folder (2)\\gh.txt','D:\\ARSDP10\\kml\\New 
 folder\\m.txt', 
'D:\\ARSDP10\\kml\\sag\\ip.txt']
lis = []
for i in data2:
    for j in data:
        if j not in i:
           lis.append(j)
print(lis)

我正在寻找的输出是:[bbbbbbbbb]

但我明白了

['bbbbbbbbb', 'ip.txt', 'ab.txt', 'bbbbbbbbb', 'ip.txt', 'ab.txt', 
 'bbbbbbbbb', 'ip.txt', 'ab.txt', 'bbbbbbbbb', 'ip.txt', 'ab.txt', 
 'bbbbbbbbb', 'ip.txt', 'ab.txt', 'bbbbbbbbb', 'ip.txt', 'ab.txt', 
 'bbbbbbbbb']

在此先感谢 :)

【问题讨论】:

    标签: python-3.x list loops


    【解决方案1】:

    您可能必须在此处使用 set。

    data=['ab.txt', 'bbbbbbbbb', 'ip.txt']
    data2=['alsdfjasldfjasdab.txt', 'alafdadfdsfasdfhkhgjip.txt']
    l=[]
    for item1 in data:
        for item2 in data2:
            if item1 in item2:
                l.append(item1)
    print(set(data).difference(set(l)))
    

    这应该会给你不存在的东西。

    【讨论】:

      【解决方案2】:

      首先从文件中删除路径以仅比较文件名:

       data2 = [i.rsplit('\\', 1)[-1] for i in data2]
       print(data2)
      
       >> ['ab.txt', 'bc.txt', 'cd.txt', 'ef.txt', 'gh.txt', 'm.txt', 'ip.txt']
      

      比较两个列表的内置函数 set.difference()

       print(set(data).difference(data2))
       >> {'bbbbbbbbb'}
      

      【讨论】:

      • 好一个!我不确定要求是否仅适用于文件路径。因此,我想到了一个通用的解决方案。
      • 谢谢,这是我的第一个答案!我试图解决他的问题而不是修复代码(我就是不能)。所以我假设修剪文件名是可以的,'bbbbbbbb'是一个文件
      【解决方案3】:

      您可以使用列表推导来检查数据 2 列表中数据列表的每个项目:

      data = ['ab.txt','bbbbbbbbb','ip.txt']
      data2 = ['D:\\ARSDP10\\Exm\\New folder\\ab.txt', 
               'D:\\ARSDP10\\Exm\\New folder\\bc.txt', 
               'D:\\ARSDP10\\Exm\\New folder\\cd.txt', 
               'D:\\ARSDP10\\Exm\\New folder (2)\\ef.txt', 
               'D:\\ARSDP10\\Exm\\New folder (2)\\gh.txt',
               'D:\\ARSDP10\\kml\\New folder\\m.txt', 
               'D:\\ARSDP10\\kml\\sag\\ip.txt']
      
      presence = [[y in x for y in data] for x in data2]
      
      [[True, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, True]]
      

      将其转换为 3 个包含 7 个值的列表,然后检查这 3 个列表中的任何一个值是否为 True:

      trans = enumerate([max(x) for x in value])
      
      [(0, True), (1, False), (2, True)]
      

      然后,使用trans列表中False的索引来获取缺失值

      missing = [data[x[0]] for x in trans if not x[1]]
      
      ['bbbbbbbbb']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-19
        • 2014-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-24
        • 1970-01-01
        相关资源
        最近更新 更多