2016-02-11 2 views
-4

Я пытаюсь извлечь ORDERED Последовательность. Например,Извлечение упорядоченной подпоследовательности из списка

a = [2, 3, 1, 4, 6, 8, 5, 9] 
b = [3, 8, 9, 4, 10, 11, 5] 
c = [3,4,5] 

c должен иметь значение, общее для a и b где [3,4,5] появляется в порядке, [8,9] не должен появляться, потому что речь идет между [3,4] в a и между [4,5] в b

Другого пример следующим образом :

a = [2, 3, 1, 4, 6, 8, 9, 10] 
b = [2, 8, 3, 9, 10, 11] 
c = [2,3,9,10] 

Я пробовал следующий код:

a = [2, 3, 1, 4, 6, 8, 5, 9] 
b = [3, 8, 9, 4, 10, 11, 5] 

for i in a: 
    for j in b: 
     if i==j: 
      print i 
      break 

Я получаю НЕПРАВИЛЬНЫЕ результаты следующим образом:

3 
4 
8 
5 
9 

Как избежать получения такой вывод? И есть ли здесь питонический путь?

ответ

2

Используйте tempval и сохраните контекст. Это можно сделать, используя встроенную функцию enumerate. Теперь, используя срезы, вы получите результат, как ожидалось.

a = [2, 3, 1, 4, 6, 8, 5, 9] 
b = [3, 8, 9, 4, 10, 11, 5] 

tempval = 0 
for i in a: 
    for ind,j in enumerate(b[tempval:]): 
     if i==j: 
      print i 
      tempval = ind 

Выход

3 
4 
5 
1

@Ekoji, чтобы получить список в порядке, вы можете попробовать следующий код. Сортируйте элементы в списке a, чтобы вы их упорядочили.

a = [2, 3, 1, 4, 6, 8, 5, 9] 
b = [3, 8, 9, 4, 10, 11, 5] 
a.sort() 
# use your logic 
for i in a: 
    for j in b: 
     if i == j: 
      print ("i is : %s j is :%s" % (i , j)) 
      if len(c) > 1: 
       print c 
       print ("validation : %s :%s" %(c[-1] , i-1)) 
       if c[-1:] == [i-1]: 
        print "continue" 
        c.append(i) 
       else: 
        print "do Nothing" 
      else: 
       c.append(i) 
print c 


Output : 
[3, 4] 
validation : 4 :4 
continue 
[3, 4, 5] 
validation : 5 :7 
do Nothing 
[3, 4, 5] 
validation : 5 :8 
do Nothing 
[3, 4, 5] 
+0

Выход по-прежнему не так, а не как ожидалось –

+0

@ Bhargav Рао, Он отлично работает для меня – Bangi

+0

Yep, но ОП хочет 3,4,5 не 3,4,5,8,9 –

Смежные вопросы