Controleer of een tekenreeks een substring van items in een Python-lijst met strings

Ik heb een lijst:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']

en wil zoeken naar items die de string bevatten 'abc'. Hoe kan ik dat doen?

if 'abc' in my_list:

Controleer of 'abc'in de lijst bestaat, maar het maakt deel uit van 'abc-123'en 'abc-456', 'abc'bestaat niet alleen. Dus hoe kan ik alle items krijgen die 'abc'bevatten?


Antwoord 1, Autoriteit 100%

Als u alleen wilt controleren op de aanwezigheid van abcin een reeks in de lijst, kunt u

proberen

some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
if any("abc" in s for s in some_list):
    # whatever

Als u echt alle items bevat die abcbevatten, gebruikt u

matching = [s for s in some_list if "abc" in s]

Antwoord 2, Autoriteit 15%

Geef hier gewoon dit in: als u toevallig tegen meer dan één string moet matchen, bijvoorbeeld abcen def, kunt u twee uitgebreide gegevens combineren als volgt:

matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]

Uitgang:

['abc-123', 'def-456', 'abc-456']

Antwoord 3, Autoriteit 8%

Gebruik filterom bij de elementen te komen die abchebben.

>>> lst = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> print filter(lambda x: 'abc' in x, lst)
['abc-123', 'abc-456']

Je kunt ook een lijstbegrip gebruiken.

>>> [x for x in lst if 'abc' in x]

Trouwens, gebruik het woord listniet als variabelenaam, aangezien het al wordt gebruikt voor het type list.


Antwoord 4, autoriteit 7%

Als je gewoon wilt weten of ‘abc’ in een van de items staat, is dit de kortste manier:

if 'abc' in str(my_list):

Opmerking: dit veronderstelt dat ‘abc’ een alfanumerieke tekst is. Gebruik het niet als ‘abc’ een speciaal teken zou kunnen zijn (bijv. []’, ).


Antwoord 5, autoriteit 2%

Dit is een vrij oude vraag, maar ik bied dit antwoord aan omdat de vorige antwoorden niet omgaan met items in de lijst die geen strings zijn (of een soort itereerbaar object). Dergelijke items zouden ervoor zorgen dat het volledige begrip van de lijst faalt met een uitzondering.

Om dergelijke items in de lijst op een elegante manier af te handelen door de niet-itereerbare items over te slaan, gebruikt u het volgende:

[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]

dan, met zo’n lijst:

lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123]
st = 'abc'

je krijgt nog steeds de overeenkomende items (['abc-123', 'abc-456'])

De test voor iterabel is misschien niet de beste. Ik heb het hier vandaan: Hoe doe je in Python Ik bepaal of een object itereerbaar is?


Antwoord 6

x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]

Antwoord 7

for item in my_list:
    if item.find("abc") != -1:
        print item

Antwoord 8

any('abc' in item for item in mylist)

Antwoord 9

Ik ben nieuw in Python. Ik heb de onderstaande code werkend gekregen en het is gemakkelijk te begrijpen gemaakt:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for item in my_list:
    if 'abc' in item:
       print(item)

Antwoord 10

Gebruik de __contains__()methode van Pythons string class.:

a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for i in a:
    if i.__contains__("abc") :
        print(i, " is containing")

Antwoord 11

Ik had de lijstindicesnodig die als volgt overeenkomen met een match:

lst=['abc-123', 'def-456', 'ghi-789', 'abc-456']
[n for n, x in enumerate(lst) if 'abc' in x]

uitvoer

[0, 3]

Antwoord 12

Als je een lijst met gegevens voor meerdere substrings wilt krijgen

je kunt het op deze manier veranderen

some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
# select element where "abc" or "ghi" is included
find_1 = "abc"
find_2 = "ghi"
result = [element for element in some_list if find_1 in element or find_2 in element] 
# Output ['abc-123', 'ghi-789', 'abc-456']

Antwoord 13

mylist=['abc','def','ghi','abc']
pattern=re.compile(r'abc') 
pattern.findall(mylist)

Antwoord 14

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for item in my_list:
    if (item.find('abc')) != -1:
        print ('Found at ', item)

Antwoord 15

Ik heb een zoekopdracht uitgevoerd, waarbij u een bepaalde waarde moet invoeren, dan zal het zoeken naar een waarde uit de lijst die uw invoer bevat:

my_list = ['abc-123',
        'def-456',
        'ghi-789',
        'abc-456'
        ]
imp = raw_input('Search item: ')
for items in my_list:
    val = items
    if any(imp in val for items in my_list):
        print(items)

Probeer te zoeken naar ‘abc’.


Antwoord 16

def find_dog(new_ls):
    splt = new_ls.split()
    if 'dog' in splt:
        print("True")
    else:
        print('False')
find_dog("Is there a dog here?")

Antwoord 17

Nan aan lijst toevoegen, en het onderstaande werkt voor mij:

some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456',np.nan]
any([i for i in [x for x in some_list if str(x) != 'nan'] if "abc" in i])

Antwoord 18

Vraag: geef de informatie van abc

   a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
    aa = [ string for string in a if  "abc" in string]
    print(aa)
Output =>  ['abc-123', 'abc-456']

Other episodes