2016-03-31 23 views
0

dizesindeki bir dizede eşleşiyorsa nasıl kontrol edilir Bir listem var ve dizenin dizeler listesinde bulunup bulunmadığını bulmak istiyorum.Altyazı, Python

li = ['Convenience','Telecom Pharmacy'] 
txt = '1 convenience store' 

Ben listeden Convenience ile txt eşleştirmek istiyoruz.

Ben Her iki yöntem çıktı vermedi

if any(txt.lower() in s.lower() for s in li): 
    print s 

print [s for s in li if txt in s] 

çalıştılar.

Alt dizgeyi liste ile nasıl eşleştirilir?

+3

Samanlıktan daha büyük bir iğne hiçbir zaman samanlıkta bulunmayacaktır. –

+0

@AlexReynolds oldukça ironik değil mi? – n00dl3

cevap

0

Ben bölünmüş cevap olduğunu düşünüyorum.

string.split (lar [, Eylül [, maxsplit]]) dize s kelimelerin

İade listesi: Burada piton belgelerinden açıklamasıdır. İsteğe bağlı ikinci bağımsız değişken ya da yok ise, sözcükler, boşluk karakterleri (boşluk, sekme, satırsonu, dönüş, form beslemesi) rasgele dizeleri tarafından ayrılır. İkinci bağımsız değişken sep mevcutsa ve Yok ise, sözcük ayırıcısı olarak kullanılacak bir dizeyi belirtir. Geri dönen liste , dizgedeki ayırıcının üst üste binmeyen oluşumundan daha fazla öğeye sahip olacaktır. Eğer maxsplit verilirse, 'da en fazla sayıda yarık bölü sayısı oluşur ve dizgisinin kalanı listenin son elemanı olarak geri döndürülür (bu nedenle, listenin en fazla 3 + 1 elemanında olacaktır). Eğer maxsplit belirtilmemişse veya -1, o zaman , bölme sayısı üzerinde bir sınır yoktur (tüm olası bölünmeler yapılır).

Boş bir dizede bölünmenin davranışı, sep değerine bağlıdır. Eğer sep belirtilmezse veya None olarak belirtilirse, sonuç boş bir liste olacaktır. Herhangi bir dize olarak sep belirtilirse, sonuç boş bir dize olan bir öğe içeren bir listesi olacaktır.

Txt değişkeninizde bulunan split komutunu kullanın. Size bir liste verecek. Daha sonra herhangi bir eşleşme bulmak için iki listede bir karşılaştırma yapabilirsiniz. Listeleri manuel olarak kontrol etmek için kişisel olarak döngüler için yuvalar yazabilirim, ancak python iş için çok sayıda araç sunar. Aşağıdaki link, iki listeyi eşleştirmek için farklı yaklaşımları tartışmaktadır.

How can I compare two lists in python and return matches

keyfini çıkarın. :-)

+1

Massiou'dan gelen örnek, kesişim komutunda bölünmeyi kullanır . – codingCat

0

Bu deneyebilirsiniz,

>> list1 = ['Convenience','Telecom Pharmacy'] 

>> txt = '1 convenience store' 

>> filter(lambda x: txt.lower().find(x.lower()) >= 0, list1) 
['Convenience'] 

# Or you can use this as well 

>> filter(lambda x: x.lower() in txt.lower(), list1) 
['Convenience'] 
+0

Neden txt'de lambda x: x.lower() kullanılmıyor? – zondo

+0

Sanırım bunu da kullanabiliriz. – Anurag

3

Sen set() ve intersection kullanabilirsiniz:

In [19]: set.intersection(set(txt.lower().split()), set(s.lower() for s in list1)) 
Out[19]: {'convenience'} 
+0

Bence set (txt.lower(). Split()) ve set (s.lower() için list1 içinde s) '' okunması daha kolay olurdu – MaxU

-1

İki şey görüyorum.

Desen dizgisinin listede bir öğeyi EXACTLY ile eşleşip eşleşmediğini bulmak ister misiniz? basit Bu durumda, hiçbir şey:

if txt in list1: 
    #do something 

Ayrıca isterseniz txt.upper() veya .lower() yapabilir liste harf duyarsız Ama anladığım kadarıyla İsterseniz bir dize varsa, bulmak txt'nin bir parçası olan (listedeki), "for" döngüsünü kullanmanız gerekir:

Çalışması gerekir.

Konsol çıkışı:

>>>print(find(['Convenience','Telecom Pharmacy'], '1 convenience store')) 
Convenience 
>>> 
İlgili konular