Проверьте, содержит ли элемент списка Python строку внутри другой строки

У меня есть список:

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

и хотите найти элементы, содержащие строку 'abc'. Как я могу это сделать?

if 'abc' in my_list:

будет проверять, существует ли 'abc' в списке, но он является частью 'abc-123' и 'abc-456', 'abc' не существует сам по себе. Итак, как я могу получить все элементы, содержащие 'abc'?

Ответ 1

Если вы хотите проверить наличие abc в любой строке в списке, вы можете попробовать

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

Если вы действительно хотите получить все элементы, содержащие abc, используйте

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

Ответ 2

Просто добавьте это: если вам нужно сопоставить более чем одну строку, например, abc и def, вы можете объединить два понимания следующим образом:

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

Выход:

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

Ответ 3

Используйте filter, чтобы получить элементы, имеющие abc.

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

Вы также можете использовать понимание списка.

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

Кстати, не используйте слово list как имя переменной, так как оно уже используется для типа list.

Ответ 4

Если вам просто нужно знать, есть ли abc в одном из пунктов, это самый короткий путь:

if 'abc' in str(my_list):

Ответ 5

Это довольно старый вопрос, но я предлагаю этот ответ, потому что предыдущие ответы не справляются с элементами в списке, которые не являются строками (или каким-то истребимым объектом). Такие элементы могут привести к сбою всего исключения списка с исключением.

Чтобы грамотно разобраться с такими элементами в списке, пропустив неистребимые элементы, используйте следующее:

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

то с таким списком:

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

вы все равно получите соответствующие элементы (['abc-123', 'abc-456'])

Тест на итерабельность может быть не лучшим. Получил это отсюда: В Python, как определить, является ли объект итерируемым?

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

Я новичок в Python. Я получил приведенный ниже код и сделал его легким для понимания:

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

Ответ 10

Используйте метод __contains__() строкового класса Pythons.:

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

Ответ 11

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

for item in my_list:
    if (item.find('abc')) != -1:
        print ('Found at ', item)

Ответ 12

mylist=['abc','def','ghi','abc']

pattern=re.compile(r'abc') 

pattern.findall(mylist)

Ответ 13

Я сделал поиск, который требует от вас ввести определенное значение, затем он будет искать значение из списка, который содержит ваш ввод:

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)

Попробуйте найти "abc".

Ответ 14

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?")

Ответ 15

По моим сведениям, оператор 'for' всегда будет потреблять время.

Когда длина списка возрастет, время выполнения также будет расти.

Я думаю, что поиск подстроки в строке с выражением "is" немного быстрее.

In [1]: t = ["abc_%s" % number for number in range(10000)]

In [2]: %timeit any("9999" in string for string in t)
1000 loops, best of 3: 420 µs per loop

In [3]: %timeit "9999" in ",".join(t)
10000 loops, best of 3: 103 µs per loop

Но я согласен с тем, что оператор any более читаем.

Ответ 16

Вопрос: Дайте информацию об 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']