2017-06-23 46 views
0

我正在尝试正则表达式的示例练习。查找所有字母的字母。对数组进行排序,最后消除所有重复。Python:Alphabet数组排序

>>> letterRegex = re.compile(r'[a-z]') 
>>> alphabets = letterRegex.findall("The quick brown fox jumped over the lazy dog") 
>>> alphabets.sort() 
>>> alphabets 
['a', 'b', 'c', 'd', 'd', 'e', 'e', 'e', 'e', 'f', 'g', 'h', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'o', 'o', 'o', 'p', 'q', 'r', 'r', 't', 'u', 'u', 'v', 'w', 'x', 'y', 'z'] 

做完这个排序后,我试着做一个循环来消除数组中的所有重复。 e.g [... 'E', 'E' ...]

所以,我没有这个

>>> i, j = -1,0 
>>> for items in range(len(alphabets)): 
     if alphabets[i+1] == alphabets[j+1]: 
      alphabets.remove(alphabets[j]) 

但是它没有工作。我如何删除重复?

+2

你已经发布的代码做不会产生你所显示的结果。请使用您正在使用的确切代码及其产生的结果来更新您的文章 – inspectorG4dget

+1

以摆脱重复性字母,您可以执行'list(set(alphabets))。sort()' – depperm

+0

[Remove items from一个列表,而迭代](https://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating) – fredtantini

回答

0

这里的移除共同出现一个更简单的方法:

import itertools 

L = ['a', 'b', 'c', 'd', 'd', 'e', 'e', 'e', 'e', 'f', 'g', 'h', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'o', 'o', 'o', 'p', 'q', 'r', 'r', 't', 'u', 'u', 'v', 'w', 'x', 'y', 'z'] 

answer = [] 
for k,_group in itertools.groupby(L): 
    answer.append(k) 

或者简单一些:

answer = [k for k,_g in itertools.groupby(L)] 

两个单产:

In [42]: print(answer) 
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 't', 'u', 'v', 'w', 'x', 'y', 'z']