2015-09-14 2 views
0

Я новичок в Python. Я попытался придумать «Корневую идентификацию» из списка данных. Но это не сработает. Вот код, который я пробовал:Идентификация корня в списке данных в python:

listData=["blackish", "blacken","blacked"] 

Выход я ожидаю:

root = [black] and suffixLi = ["ish", "en", "ed"] 

Остальной код:

def root(): 
    i=0 
    j=0 
    string = "" 
    for word in listData: 
     for i in range(len(min(listData, key=len))-1): 
      print(len(min(listData, key=len))) 
      if (listData[i][j]==listData[i+1][j]): 
       string=string+listData[i][j] 
       print(listData[i][j]) 
       print(string) 
      i=i+1 
      j=j+1 
    print(string) 
+0

Не могли бы вы изменить свой вопрос, чтобы включить выходной ток? –

+0

Пожалуйста, задайте четкий вопрос. Предоставьте полный код и полученный результат. Что еще вы пробовали? Например, какие заявления печати или трассировка отладки вы использовали, и что вы получили от этого? – Prune

+0

Вы ищете самый длинный общий префикс? –

ответ

0

Предположив вы хотите, пытаясь найти общий префикс:

def root_pre(l): 
    root = "" 
    for t in zip(*l): 
     if not all(t[0] == s for s in t): 
      break 
     root += t[0] 
    ln = len(root) 
    pres = [s[ln:] for s in listData] 
    return root, pres 

print(root_pre(listData)) 
('black', ['ish', 'en', 'ed']) 
+0

Спасибо. Оно работает. Но еще одна вещь, чтобы дать предложение: –

+0

Что делать, если у меня есть такие данные, как listData = ["blackish", "blacken", "blacked", "Cut"] и для создания: Prefix = ["blackish", "blacken" «blacked»] и diff = [cut]. Еще раз спасибо !!!!!!! –

0

В если утверждение, индекс я + 1 вне пределов досягаемости. Исправьте ограничение цикла на две строки раньше; вы не можете запустить «i» дальше, чем list_length-2, но вы пытаетесь запустить его до конца.

Кроме того, вы увеличиваете i внутри цикла, который уже контролирует его значение; Я думаю, вы запутались в том, как обрабатывать индексы цикла.

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