Jak ustalić, czy podciąg znajduje się w innym ciągu


107

Mam podciąg:

substring = "please help me out"

Mam inny ciąg:

string = "please help me out so that I could solve this"

Jak sprawdzić, czy substringjest podzbiorem stringużywania języka Python?

Odpowiedzi:


169

z in: substring in string:

>>> substring = "please help me out"
>>> string = "please help me out so that I could solve this"
>>> substring in string
True

10
rany, python jest zbyt silny, myślałem, że potrzebuje do tego funkcji, ale jest to wbudowana Oo
dźwięk wiatru

Po prostu uczyłem się JS po nauczeniu się Pythona, w tym celu musiałbyś dodać mnóstwo instrukcji if else i innych rzeczy. Chciałem więc tylko przypomnieć sobie, jak to się robi w Pythonie, ta odpowiedź sprawiła, że ​​powiedziałem sobie „Oczywiście!”, Mam na myśli, że takie rzeczy w Pythonie są tak trywialne, że nigdy nie poświęcasz im wiele uwagi! : P
Games Brainiac

@GamesBrainiac Właściwie, aby zrobić to samo w JS, wystarczy string.indexOf(substring) != -1, więcej tutaj
LasagnaAndroid

Po znalezieniu podłańcucha tak istnieje w ciągu, w jaki sposób można znaleźć pozycję, w której znajduje się ciąg i co się stanie, jeśli podciąg znajduje się w ciągu więcej niż raz?
yoshiserry

@yoshiserry, jeśli chcesz mieć pozycję substringin string, użyj string.index
MarcoS

21
foo = "blahblahblah"
bar = "somethingblahblahblahmeep"
if foo in bar:
    # do something

(Przy okazji - staraj się nie nazywać zmiennej string, ponieważ istnieje standardowa biblioteka Pythona o tej samej nazwie. Możesz zmylić ludzi, jeśli zrobisz to w dużym projekcie, więc unikanie takich kolizji jest dobrym nawykiem.)


Nie tylko zmylić, ale także zepsuć wszystko, co odnosi się do łańcucha po tym punkcie.
rplnt

13

Jeśli szukasz czegoś więcej niż prawda / fałsz, najlepiej będzie użyć modułu re, takiego jak:

import re
search="please help me out"
fullstring="please help me out so that I could solve this"
s = re.search(search,fullstring)
print(s.group())

s.group() zwróci ciąg „proszę, pomóż mi”.


1
Dobra wskazówka dotycząca wyszukiwania wyrażeń regularnych.
Randall Cook

w lżejszym tonie. jeśli próbujesz rozwiązać coś za pomocą wyrażenia regularnego, próbujesz rozwiązać dwa problemy.
Hasan Iqbal

10

Pomyślałem, że dodam to na wypadek, gdybyś zastanawiał się, jak to zrobić na rozmowie technicznej, w której nie chcą, abyś używał wbudowanej funkcji Pythona inlub find, co jest okropne, ale się zdarza:

string = "Samantha"
word = "man"

def find_sub_string(word, string):
  len_word = len(word)  #returns 3

  for i in range(len(string)-1):
    if string[i: i + len_word] == word:
  return True

  else:
    return False

2
Niezły przykład, ale Twoja identyfikacja jest nieprawidłowa. Aby przyspieszyć działanie, sprawdziłbym if len(substring) > len(string) return Falserównież, że zakres pętli powinien być lepszy, range(len(string)-len(substring))ponieważ nie znajdziesz trzyliterowego słowa w dwóch ostatnich literach ciągu. (Zapisuje kilka iteracji).
AnyOneElse

9

Ludzie wspomnieli string.find(), string.index()iw string.indexOf()komentarzach, a ja podsumowuję je tutaj (zgodnie z dokumentacją Pythona ):

Przede wszystkim nie ma string.indexOf()metody. Link opublikowany przez Deviljho pokazuje, że jest to funkcja JavaScript.

Po drugie string.find()i string.index()faktycznie zwracają indeks podciągu. Jedyna różnica polega na tym, jak radzą sobie z sytuacją nie znalezionego podciągu: string.find()zwraca, -1gdy string.index()podnosi ValueError.


5

Możesz także wypróbować metodę find (). Określa, czy łańcuch str występuje w łańcuchu, czy w podłańcuchu łańcucha.

str1 = "please help me out so that I could solve this"
str2 = "please help me out"

if (str1.find(str2)>=0):
  print("True")
else:
  print ("False")

1
In [7]: substring = "please help me out"

In [8]: string = "please help me out so that I could solve this"

In [9]: substring in string
Out[9]: True

1
def find_substring():
    s = 'bobobnnnnbobmmmbosssbob'
    cnt = 0
    for i in range(len(s)):
        if s[i:i+3] == 'bob':
            cnt += 1
    print 'bob found: ' + str(cnt)
    return cnt

def main():
    print(find_substring())

main()

znajdź podciąg „bob” w podanym ciągu.
avina k

0

Można również użyć tej metody

if substring in string:
    print(string + '\n Yes located at:'.format(string.find(substring)))

0

wprowadź opis obrazu tutaj

Zamiast używać funkcji find (), jednym z prostszych sposobów jest użycie „in” jak powyżej.

jeśli „podciąg” jest obecny w „str”, to jeśli część zostanie wykonana, w przeciwnym razie zostanie wykonana część.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.