【问题标题】:Using the enumerate function with sub-string/similar strings使用带有子字符串/相似字符串的枚举函数
【发布时间】:2020-03-05 19:12:45
【问题描述】:

试图在两个列表中查找字符串的索引。有问题,因为字符串相似。

 directories = ['C:/Desktop/5SvF9yM6ldXGRpBz1.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz11.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz12.csv']

 barcodes = ['5SvF9yM6ldXGRpBz1',
'5SvF9yM6ldXGRpBz11',
'5SvF9yM6ldXGRpBz12']

下面的输出。如何获得第一个条形码 '5SvF9yM6ldXGRpBz1' = [0] 而不是 [0,1,2]

5SvF9yM6ldXGRpBz1
[0, 1, 2]
5SvF9yM6ldXGRpBz11
[1]
5SvF9yM6ldXGRpBz12
[2]

【问题讨论】:

    标签: python-3.x list substring list-comprehension enumerate


    【解决方案1】:

    您应该考虑以下事项

    from os.path import basename, splitext
    [[i for k in barcodes if k==splitext(basename(j))[0]] for i,j in enumerate(directories)]
    
    [[0], [1], [2]]
    

    或者你可以使用正则表达式:

    import re
    [[i for k in barcodes if re.sub('.*/(\w+).*','\\1',j)==k] for i,j in enumerate(directories)]
    [[0], [1], [2]]
    [[i for k in barcodes if re.sub('.*/|\\..*','',j)==k] for i,j in enumerate(directories)]
    [[0], [1], [2]]
    

    【讨论】:

    • @Onyambu ....再次感谢您的帮助。这不是我的想法。每个条形码显示指向一个索引。我正在寻找的是。 5SvF9yM6ldXGRpBz1 [0] 5SvF9yM6ldXGRpBz11 [1] 5SvF9yM6ldXGRpBz12 [2]
    • 该函数似乎与 '5SvF9yM6ldXGRpBz1' 混淆了,因为它是其他两个条形码的子字符串。唯一不同的是其他两个条形码以“11”和“12”结尾
    • 你可以创建字典或元组:例如{j:[i for k in directories if j==splitext(basename(k))[0]] for i,j in enumerate(barcodes)}
    • @defjamvan。确切地。这就是问题所在。要解决这个问题,您将不得不使用正则表达式甚至==
    • 我将无法使用 ==,因为它正在检查条形码是否在目录中。 :barcode_index = [i for i,x in enumerate(directories) if unique_b_code == x] 不像你建议的那样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多