リストがあります:
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
そして、文字列を含むアイテムを検索したいとします'abc'。どうやってやるの?
if 'abc' in my_list:
'abc'リストに存在するかどうかを確認しますが、それは'abc-123'およびの一部であり'abc-456'、'abc'それ自体では存在しません。では、どのようにしてすべてのアイテムを取得できます'abc'か?
リストがあります:
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
そして、文字列を含むアイテムを検索したいとします'abc'。どうやってやるの?
if 'abc' in my_list:
'abc'リストに存在するかどうかを確認しますが、それは'abc-123'およびの一部であり'abc-456'、'abc'それ自体では存在しません。では、どのようにしてすべてのアイテムを取得できます'abc'か?
回答:
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]
if myitem in myarray:
filter(lambda element: 'abc' in element, some_list)
index()方法:try: return mylist.index(myitem); except ValueError: pass
これを捨てるだけです。たとえばabcandのようにdef、複数の文字列と照合する必要がある場合、次のように2つの内包表記を組み合わせることができます。
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']
{s for s in my_list for xs in matchers if xs in s}(一意のセットを作成するには、中括弧に注意してください)。読みやすいかもしれませんが、ほとんどのs値が一致する場合anyは、最初の一致で効率的に停止するため、遅くなる可能性があります。
「abc」が項目の1つにあるかどうかを知る必要があるだけの場合、これが最短の方法です。
if 'abc' in str(my_list):
これはかなり古い質問ですが、以前の回答では文字列(または、ある種の反復可能なオブジェクト)ではないリストの項目には対応していないため、この回答を提供します。このような項目があると、リスト全体の理解が例外で失敗します。
反復不可能な項目をスキップしてリスト内のそのような項目を適切に処理するには、以下を使用します。
[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では、オブジェクトが反復可能かどうかをどのように判断しますか?
[el for el in lst if el and (st in el)]与えられた例ではもっと意味がありませんか?
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456'] それを過度に複雑にする必要はありません。
for item in my_list:
if item.find("abc") != -1:
print item
if 'abc' in item使用するよりも慣用的であると思いますitem.find('abc') == -1。
__contains__()Pythons文字列クラスのメソッドを使用します。:
a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for i in a:
if i.__contains__("abc") :
print(i, " is containing")
Pythonは初めてです。以下のコードを機能させて、理解しやすくしました。
my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for str in my_list:
if 'abc' in str:
print(str)
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)
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?")
私の知る限りでは、「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声明がより読みやすいことに同意します。