2015-06-02 4 views
1

Я пытаюсь сравнить отдельные символы в строке в python, и я не уверен, как это сделать. В файле строк все строки принадлежат к группам, и я хочу определить, имеет ли 75% строк в группе один и тот же символ в данной позиции, и если это так, удалите все строки, полученные по сравнению с исходной строкой.Сравнение символов внутри строки

Я что-то вроде следующего мышления, сравнивая char2 в слове большой/ошибка:

count=0 
group1_big 
group1_big 
group1_bigs 
group1_bugs 
group2_bug 

for(string in file) 
    if(chars 1-7 of string == chars 1-7 of next string & char 9 is the same in both words) 
     if(75% are the same at position 9) 
      delete all other strings in the same group 

В этом случае, если мы сравним символы 1-7, все GROUP1 матчи, и 75% имеют и 'i' в позиции символа 9 удалить все, кроме первого. В результате в следующем выходе файла:

group1_big 
group2_bug 
+0

А что, если у нас есть 2 группа слов, которая имеет такой же характер, в положении 9? Рассмотрим 'group1_big group1_big group1_bigs group1_bugs1 group1_bugs2 group1_bug3 group2_bug' – Kasramvd

+0

Рассматривать как отдельные группы, только если это то же самое в группе должны все остальные члены группы будут удалены. –

+0

Как группы записываются в файл? – ytpillai

ответ

1
>>> s="""group1_big 
... group1_big 
... group1_bigs 
... group1_bugs 
... group2_bug""" 
>>> d={} 
>>> for i in s.split('\n') : 
... d.setdefault(i[:7],[]).append(i) 
... 
>>> from collections import Counter 
>>> count={len(j):Counter([t[8] for t in j]).most_common() for i,j in d.items()} 
>>> final_count=[next((t[0] for t in j if t[1]>=0.75*i),j) for i,j in count.items()] 
>>> words=[next((t for t in v if t[8] in final_count),None) for v in d.values()] 
>>> words 
['group2_bug', 'group1_big'] 

Это моя первая попытка я думаю, что это может быть сделано лучше.

В первой части вы можете создать словарь, как следующее:

>>> for i in s.split('\n') : 
... d.setdefault(i[:7],[]).append(i) 

>>> d 
{'group2_': ['group2_bug'], 'group1_': ['group1_big', 'group1_big', 'group1_bigs', 'group1_bugs']} 

затем создать словарь из подсчета 9-символов значений d с помощью collections.Counter и длину слов в качестве ключа:

>>> count 
{1: [('u', 1)], 4: [('i', 3), ('u', 1)]} 

затем найти окончательные 9-символы, которые встречает свое состояние, используя следующий список понимание:

final_count=[next((t[0] for t in j if t[1]>=0.75*i),j) for i,j in count.items()] 
>>> final_count 
['u', 'i'] 

И наконец получить окончательные слова из значений d используя список понимание

>>> words=[next((t for t in v if t[8] in final_count),None) for v in d.values()] 
>>> words 
['group2_bug', 'group1_big'] 
Смежные вопросы