Проверьте, содержит ли элемент списка 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']