How do I search for items that contain the string 'abc'
in the following list?
xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
The following checks if 'abc'
is in the list, but does not detect 'abc-123'
and 'abc-456'
:
if 'abc' in xs:
How do I search for items that contain the string 'abc'
in the following list?
xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
The following checks if 'abc'
is in the list, but does not detect 'abc-123'
and 'abc-456'
:
if 'abc' in xs:
To check for the presence of 'abc'
in any string in the list:
xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
if any("abc" in s for s in xs):
...
To get all the items containing 'abc'
:
matching = [s for s in xs if "abc" in s]
filter(lambda element: 'abc' in element, some_list)
–
Accidental any("abc" in s for s in some_list)
in another function and say contains("abc",list)
–
Guppy if myitem in myarray: return index_number
or something. –
Yenta index()
method: try: return mylist.index(myitem); except ValueError: pass
–
Aubert mylist
has a None
inside it will throw an exception. To fix this: any(["abc" in s for s in some_list if s])
–
Hawsepipe any(['abc' in s for s in some_list])
–
Amarillo any()
always returns a Boolean value in any Python version that supports it. (Not sure what gave you the idea you need the square brackets.) –
Aubert from numpy import *
or --pylab
causes quite a bit confusion due to shadowed built-ins, which is why I tend to avoid it. –
Aubert matching = [s for s in some_list if "abc".lower() in s.lower()]
–
Chard "abc" in some_string
will check for presence of "abc"
as an exact, contiguous substring of some_string
, so both "abc" in "cba-4123"
and "abc" in "a-b-c"
will return False
. No modification of the code required. –
Aubert Just throwing this out there: if you happen to need to match against more than one string, for example abc
and def
, you can combine two comprehensions as follows:
matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]
Output:
['abc-123', 'def-456', 'abc-456']
{s for s in my_list for xs in matchers if xs in s}
(note the curly brackets to create a unique set). Might be easier to read, but could be slower if most s
values will have a match, since your any
will efficiently stop at the first match. –
Sadomasochism matchers
). I just changed any
for all
and it did the trick: matching = [s for s in my_list if all(xs in s for xs in matchers)]
–
Ayer Use filter
to get all the elements that have 'abc'
:
>>> xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> list(filter(lambda x: 'abc' in x, xs))
['abc-123', 'abc-456']
One can also use a list comprehension:
>>> [x for x in xs if 'abc' in x]
If you just need to know if 'abc' is in one of the items, this is the shortest way:
if 'abc' in str(my_list):
Note: this assumes 'abc' is an alphanumeric text. Do not use it if 'abc' could be just a special character (i.e. []', ).
This is quite an old question, but I offer this answer because the previous answers do not cope with items in the list that are not strings (or some kind of iterable object). Such items would cause the entire list comprehension to fail with an exception.
To gracefully deal with such items in the list by skipping the non-iterable items, use the following:
[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]
then, with such a list:
lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123]
st = 'abc'
you will still get the matching items (['abc-123', 'abc-456']
)
The test for iterable may not be the best. Got it from here: In Python, how do I determine if an object is iterable?
[el for el in lst if el and (st in el)]
make more sense in the given example? –
Adactylous my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
no need to over complicate it. –
Adactylous x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]
for item in my_list:
if item.find("abc") != -1:
print item
if 'abc' in item
rather using item.find('abc') == -1
. –
Zoes I am new to Python. I got the code below working and made it easy to understand:
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for item in my_list:
if 'abc' in item:
print(item)
Use the __contains__()
method of Pythons string class.:
a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for i in a:
if i.__contains__("abc") :
print(i, " is containing")
I needed the list indices that correspond to a match as follows:
lst=['abc-123', 'def-456', 'ghi-789', 'abc-456']
[n for n, x in enumerate(lst) if 'abc' in x]
output
[0, 3]
If you want to get list of data for multiple substrings
you can change it this way
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']
mylist=['abc','def','ghi','abc']
pattern=re.compile(r'abc')
pattern.findall(mylist)
import re
mylist=['abc','def','ghi','abcff']
my_list_string=''.join(mylist)
string_to_find="abc"
res=re.findall(string_to_find,my_list_string)
print(res)
–
Quadroon Adding nan to list, and the below works for me:
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])
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for item in my_list:
if (item.find('abc')) != -1:
print ('Found at ', item)
I did a search, which requires you to input a certain value, then it will look for a value from the list which contains your input:
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)
Try searching for 'abc'.
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?")
© 2022 - 2024 — McMap. All rights reserved.