2016-12-13 3 views
1

考慮されるべきです'd')はlist1にあります。 以下は所望の出力以下のpythonは、長さの異なる2リスト内の項目を比較し、シーケンス/重複が

output = ['b','c'] 

がある私は同じことをやって、任意のより良い方法がある

i = 0 
j = 0 
output = [] 
while(True): 
    if(list1[i] == list2[j]): 
     i += 1 
     j += 1 
     if (j == len(list2)): 
      break 
    else: 
     output.append(list1[i]) 
     i = i + 1 

を持っているコードはありますか?

ありがとうございます!

+0

ありたいと思いますか? – MMF

+0

また、ループはどのように終了しますか?リストはIndexErrorをスローしませんか? – roymustang86

+0

「['b'、 'c'、 'e'、 'f'] 'はなぜですか? –

答えて

3

は、私はあなたがitertools.takewhile

from itertools import takewhile 

def taker(l1, l2): 
    it = iter(l1) 
    for j in l2: 
     yield from takewhile(lambda x: x!=j, it) 

list(taker(list1, list2))あなたは `[ 'B'、 'C​​']を`あなたの出力を得るために比較してどうか['b', 'c']

+0

微妙ですが、イテレータitを前進させて等価を破棄するという副作用は、この問題のためにはちょうど良い方法です。 – AChampion

関連する問題