2016-03-19 24 views
0

Tüm look_string öğelerinin, look_here_string listesindeki dizelerden birinde mevcut olup olmadığını belirlemeye çalışıyorum. Verimlilik nedeniyle, bir eleman yoksa, kelime listeden kaldırılır. Ben olsun çıkışBir dizenin tüm öğeleri için dizelerin bir listesini arama

1 not in dedakloera  
1 not in tuau   
1 in 1abcdefg   
a in 1abcdefg   
b in 1abcdefg   
c in 1abcdefg 

Bu edilir:

search_string = '1abc' 
look_here_string = ['dedakloera', 'tuau', '1abcdefg'] 
x = 0 
counter = 0 

for item in search_string: 
    item = search_string[counter] 
    #print item, search_string, look_here_string[x] 
    if not item in look_here_string[x]: 
     print item, 'not in', look_here_string[x] 
     look_here_string.remove(look_here_string[x]) 
     counter = 0 
    else: 
     print item, 'in', look_here_string[x] 
     counter +=1 

Bu

aradığım çıkışı

1 not in dedakloera #correct 
1 not in tuau   #correct 
1 in 1abcdefg   #correct 
a in 1abcdefg   #correct 

komut zamanından önce durdurarak gibi görünüyor, ama yapamam Kodumda neyin yanlış olduğunu anlamaya çalışıyorum. Yardımınız için çok minnettarım! Bu yaratır

>>> search_string = '1abc' 
>>> look_here_string = ['dedakloera', 'tuau', '1abcdefg'] 
>>> [string for string in look_here_string 
      if all(char in string for char in search_string)] 

:

+1

Çünkü n = len (search_string) için yinelenen search_string: 'öğesinde' 'kelimesini kullandınız, bu nedenle çıktıyı yalnızca 4 kez basıyor. – ZdaR

+0

Bunu nasıl düzeltirim? –

cevap

1

Daha basit bir yaklaşım Bu daha da kısaca "tüm" yerleşik işlev ve bir liste anlama kullanarak yazabilirsiniz dış döngü

search_string = '1abc' 
look_here_string = ['dedakloera', 'tuau', '1abcdefg'] 
ind_to_remove = [] 
for i,s in enumerate(look_here_string): 
    for e in search_string: 
     if not e in s: 
      ind_to_remove.append(i) 
      print e, 'not in', s 
      break 
     else: 
      print e, 'in', s 
for i in ind_to_remove[::-1]: 
    del look_here_string[i] 
+0

Bu giriş için teşekkür ederiz: Kodunuzu doğru bir şekilde anlarsam, önce yok dizelerinin bir dizin listesi oluşturur ve bu listeye göre öğeleri look_here_string'den kaldırırsınız. Bu çok yardımcı oldu! –

+0

@Johannes Schwaninger Hoş Geldiniz) Ve evet, her şeyi doğru anlıyorsunuz. – kvorobiev

1

yılında look_here_string yinelemenize etmektir yeni bir liste, ancak geçersiz dizeleri otomatik olarak filtreler.

+1

çok özlü kod! - "all" kullanma önerisi için teşekkürler –