2016-03-29 4 views
0

У меня есть два списка, содержащие строки. Первый список содержит список файлов и каталогов:Соответствие подстроки в другой строке

list1 = ['path/to/my/files', 
     'path/to/more/of/my/files', 
     'path/to/my/dirs', 
     'path/to/more/of/mydirs'] 

второй список содержит каталоги, которые я хочу, чтобы проверить против list1 существования.

list2 = ['path/to/my', 
     'random/path/to/somewhere', 
     'path/does/not/matter', 
     'hey/path/is/here'] 

Единственные результаты, которые я хочу это path/to/my/*, но когда я использую str.find() она возвращается любую строку, содержащую path или to или my независимо от того, где это происходит в строке.

Таким образом, вместо того, чтобы просто получать:

path/to/my/files 
path/to/my/dirs 

Я получаю все в list1

Мой код следующим образом:

for dir in list2: 
    for path in list1: 
     if path.find(dir): 
     print(path) 
+0

Когда вы пишете «список», вы имеете в виду файл или питона 'list'? В коде, который вы разместили здесь, должно быть что-то отсутствует. – jDo

+0

@jDo это список python –

+0

https://docs.python.org/2/library/string.html#string.find, вы также можете просто использовать 'if dir in path', действительно найти используется, если вы хотите индекс, вы не хотите просто посмотреть, соответствует ли он –

ответ

3

Все ненулевые числа Truthy. Когда ваша строка не найдена, .find() возвращает -1, который по-прежнему True. Вы должны убедиться, что результат не -1:

for dir in list2: 
    for path in list1: 
     if path.find(dir) != -1: 
      print(path) 

Как @PadraicCunningham упоминалось в комментариях, что это не самый простой способ. Просто используйте in оператор:

for dir in list2: 
    for path in list1: 
     if dir in path: 
      print(path) 
+0

Я пробовал это, и он не работает. Я не получаю никаких результатов, и есть определенные соответствия. –

+0

@free_mind, эта логика правильна в зависимости от вашего описания проблемы, если она не работает, то ваше описание неверно, а не решение. –

+0

@free_mind "есть определенные совпадения" Откуда вы знаете? Вы печатали все пути? Как они выглядят, точно? Могут быть некоторые тонкие проблемы, не охватываемые вашими примерами. –

2

Я думаю, что вам нужно, это str.startswith()

+0

Я новичок в python, есть ли 'str.startswith()'? –

+0

['str.startswith()'] (https://docs.python.org/3/library/stdtypes.html#str.startswith) – khelwood

Смежные вопросы