2015-09-03 4 views
0

Предположим, у меня есть список строки, как следующее:сравнивая элемент списка в определенном интервале в питона

L = ['AB','BC','CD','EF','JK','LM'] 

Теперь я хочу, чтобы сравнить first item что AB к first three items из L, который был бы 'AB','BC','CD' и если найти любое совпадение Я буду increase count by 1 и хранить в dictionary. После этого я хочу сравнить второй элемент L, который является «BC», до «BC», «CD», «EF», который от «BC» до следующих двух элементов и так далее. Первый элемент будет сравниваться с первыми тремя элементами L, второй элемент L будет сравниваться с тремя элементами L, начиная с индекса 1, а третий элемент L будет сравниваться с тремя элементами L, начиная с L [2], до следующих трех элементы L. Как я могу сделать это в Python? И последнее, что я добавляю каждый элемент L как keys and count как значения в dictionary.

Мои коды выглядят неработоспособными.

for i in range(0,len(L)-1): 

    for ii in range(i,3+i): 
     count = 0 

     if L[i] == L[ii]: 
      count = 1 + count 
      dic[L[i]] = count 
+0

С одной стороны, вы столкнетесь с проблемами, когда ii> len (L) - 1. Например, ii может достигать 3 + len (L) -1, что больше, чем len (L) -1. – hft

+1

Возможно, вы можете привести несколько примеров входных списков и соответствующий ожидаемый результат. – Falko

+0

, если вы хотите получить доступ или работать над ним в каком-либо сегменте списка, тогда вы должны использовать, скажем, список «L», а затем использовать: «L [start_index: end_index]» , где включено start_index и final_index из диапазона. if 'i = 0', тогда' L [i: i + 3] 'вернет первые три элемента вашего списка – Abhi

ответ

0

Я не совсем уверен, что вы собираетесь достичь, но здесь немного больше вещие реализации с enumerate, list generator и slices вместо простой индексации с помощью range:

L = ['AB', 'AB', 'CD', 'EF', 'JK', 'LM'] 
stats = {key: 0 for key in L} 
for index, value in enumerate(L): 
    lookforward = L[index:index+2] 
    lookforward = [item for item in lookforward if item == value] 
    value_counter = len(lookforward) 
    stats[value] += value_counter 

Пожалуйста Отметим, что результат этого кода будет

stats = {'AB': 3, 'EF': 1, 'JK': 1, 'CD': 1, 'LM': 1} 

с 'AB': 3, так как это следует а, алгоритм, который вы описали в тексте.

+0

Спасибо, человек, за подсказку. – Yousuf

1

Вы можете сделать это просто slice техникой:

L = ['AB', 'AB', 'CD', 'EF', 'JK', 'LM'] 
count = {key: 0 for key in L} 
for i in range(len(L)): 
    count[L[i]] = count[L[i]] + len([ele for ele in L[i:i+3] if ele == L[i]]) 

print count 

Выход:

{'JK': 1, 'AB': 3, 'LM': 1, 'EF': 1, 'CD': 1} 
+0

Спасибо. Я решил это по-другому. – Yousuf

0

Просто чтобы быть ясно, если вы собираетесь сравнивать 'AB' с 'AB', «до н.э. ',' CD ', тогда всегда первая петля сравнения вернется к истине, поскольку вы сравниваете «AB» с «AB». Поэтому я предполагаю, что вы хотите сравнить «AB» с «BC», «CD», «EF». Я могу дать вам логику в java. Может быть, вы можете использовать его в python. Список listToCompare = { 'AB', 'BC', 'CD', 'EF', 'GH', 'JK', 'LM'}

int compStrIndex =0; 
for (String str : listToCompare){ 
     System.out.println("Comparing "+listToCompare.get(compStrIndex)+" with the rest of the elements"); 
     int x = compareString(compStrIndex, listToCompare); 
     if (x==1){ 
      System.out.println("Got match!!!"); 
     }else{ 
      System.out.println("Match failed!!!"); 
     } 
     compStrIndex++; 
    } 

private static int compareString(int compStrIndex, List<String> listToComp){ 
    String strToComp = listToComp.get(compStrIndex); 
    int compIndex = ++compStrIndex; 
    int cnt = 0; 

    while(cnt<3){ 
     System.out.println("Comparing "+ strToComp + " with "+ listToComp.get(compIndex)); 
     if(strToComp.equals(listToComp.get(compIndex))){ 
      return 1; 
     } 
     compIndex++; 
     cnt++; 
    } 

    return 0;  
} 

Ниже выход я получил:
Сравнение AB с остальными элементами
Сравнение АВ с до н.э.
Сравнение AB с CD
Сравнение AB с EF
Match не удалось !!!

Сравнивая BC с остальными элементами
Сравнение BC с CD
Сравнение BC с EF
Сравнение BC с GH
матч не удалось !!!

Сравнивая CD с остальными элементами
Сравнение CD с EF
Сравнение CD с GH
Сравнение CD с JK
матч не удалось !!!

Сравнивая EF с остальными элементами
Сравнение EF с GH
Сравнение EF с JK
Сравнение EF с LM
Match неудавшихся !!!

Сравнивая GH с остальными элементами
Сравнение GH с JK
Сравнение GH с LM
Match неудавшихся !!!

Сравнение JK с остальными элементами
Сравнение JK с LM
Матч не удался !!!

Сравнение LM с остальными элементами
Матч не удался !!!

+0

Чем ты, Это большое объяснение. – Yousuf

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